DFS/BFSアルゴリズム
1746 ワード
!!个人的に勉强するために间违った内容があるかもしれませんから!!間違った内容があれば、いつでも指摘してください.
DFSとBFSアルゴリズム
その名の通り深さ優先はDFS,幅優先はBFSアルゴリズムである.
これは符号化テストでよく発生する問題で、明らかにしたほうがいい.
ご覧のように、1つのノードで隣の兄弟ノードを検索するのではなく、まずサブノードを検索します.サブノードがなくなるまで移動した後、兄弟ノードをナビゲートし、この手順を繰り返し、すべてのノードに移動する方法は深さ優先ナビゲーションです.名前のように、最も深いノードを探索した後、隣のノードを探索する方法です.
私の場合、DFSを実現する際に主にこの方法を使用します.
DFSとは逆にBFSはまず兄弟ノードにアクセスする.
すべての兄弟ノードをブラウズした後、サブノードを繰り返しブラウズし、すべてのノードをブラウズする方法はBFS方式である.コードで実装する場合は、キューを使用して現在のノードに関連するすべてのノードを配置し、1つずつポップアップしてナビゲートします.
DFSとBFSアルゴリズム
その名の通り深さ優先はDFS,幅優先はBFSアルゴリズムである.
これは符号化テストでよく発生する問題で、明らかにしたほうがいい.
DFS
이미지 출처: 위키피디아
写真の数字はアクセスの順番です.ご覧のように、1つのノードで隣の兄弟ノードを検索するのではなく、まずサブノードを検索します.サブノードがなくなるまで移動した後、兄弟ノードをナビゲートし、この手順を繰り返し、すべてのノードに移動する方法は深さ優先ナビゲーションです.名前のように、最も深いノードを探索した後、隣のノードを探索する方法です.
私の場合、DFSを実現する際に主にこの方法を使用します.
/*
start 시작 노드
n 노드의 개수
visit 방문 여부를 저장하는 bool 배열
arr 노드간에 간선이 존재하는지를 표시(1인 경우 간선 존재)
*/
void DFS(int start){
visit[start] = true;
for(int i=0; i<n; i++){
if(arr[start][i] == 1 && !visit[i])
DFS(i);
}
}
BFS
이미지 출처: 위키피디아
写真の数字はアクセスの順番です.DFSとは逆にBFSはまず兄弟ノードにアクセスする.
すべての兄弟ノードをブラウズした後、サブノードを繰り返しブラウズし、すべてのノードをブラウズする方法はBFS方式である.コードで実装する場合は、キューを使用して現在のノードに関連するすべてのノードを配置し、1つずつポップアップしてナビゲートします.
/*
start 시작 노드
n 노드의 개수
visit 방문여부를 저장하는 bool 배열
arr 간선 존재 여부(1이면 간선 존재)
queue 현재 노드에 연결된 모든 노드들을 담아줄 큐
*/
void BFS(int start){
queue<int> q;
q.push(start);
visit[start] = true;
while(!q.empty()){
int tmp = q.front();
q.pop();
for(int i=0; i<n; i++){
if(arr[start][i] == 1 && !visit[i]){
q.push(i);
visit[i] = true
}
}
}
}
Reference
この問題について(DFS/BFSアルゴリズム), 我々は、より多くの情報をここで見つけました https://velog.io/@binary_j/DFSBFS-알고리즘テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol