Pseudo code

BFS(v)
    for(i=0;i<n;i++)
        visited[i] = false
    Queue = creaetQueue()
    Visited[v]  = true
    v 방문
    while(not isEmpty(Queue))
        While(visited[v의 인접정점 w] == false)
            Visited[w] = true
            W 방문
            Queue.push(w)
        v = q.pop()



//BFS(인접리스트) 내가 구현한 코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
/*7 7 1
1 2
1 3
2 4
2 5
3 6
3 7
6 7
*/
class graph{
public:
int vertex;//정점의 갯수
vector<vector<int>> edge;//간선 목록
vector<bool> visited;//방문 여부
queue<int> q;
graph(int n){
vertex = n;
edge.resize(n + 1);
visited.resize(n + 1, false);
}
void bfs(int v){
cout << v << " ";
visited[v] = true;
q.push(v);
while (!q.empty()){
v = q.front();
for (auto i : edge[v]){
if (!visited[i]){
cout << i << " ";
visited[i] = true;
q.push(i);
}
}
q.pop();
}
}
};
int main(){
int n, m, v, i, a, b;
graph *g;
cin >> n >> m >> v;
g = new graph(n);
for (i = 0; i < m; i++){
cin >> a >> b;
g->edge[a].push_back(b);
g->edge[b].push_back(a);
}
for (i = 1; i <= n; i++)
sort(g->edge[i].begin(), g->edge[i].end());
g->bfs(v);
}


'알고리즘' 카테고리의 다른 글

Union - Find  (0) 2019.03.08
DFS(Depth First Search)  (0) 2019.03.08

+ Recent posts