PS
BOJ - 1260. DFS와 BFS (C++)
kugnuoy
2024. 3. 19. 18:01
1260. 노드와 간선으로 이루어진 DFS, BFS
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
[풀이]
노드와 간선으로 BFS, DFS 문제를 해결해야 하는 경우, 아래 그림의 이론을 바탕으로 코드를 짜야한다.
간선을 vector<int> adj[1000] 으로 노드를 int vis[1000] 로 구현한다.
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[1002];
int vis1[1002];
int vis2[1002];
int N,M,V;
void dfs(int cur){
cout << cur << ' ';
vis1[cur] = 1;
for(int i:adj[cur]) if (vis1[i] == 0) dfs(i);
return;
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin >> N >> M >> V;
for(int i=0; i<M; i++) {
int u,v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1; i<=N; i++) sort(adj[i].begin(), adj[i].end());
// DFS
dfs(V);
cout << '\n';
// BFS
queue<int> Q;
Q.push(V); vis2[V] = 1;
while(Q.size()){
int cur = Q.front();
cout << cur << ' '; Q.pop();
for(int i:adj[cur]){
if (vis2[i] == 0) {
Q.push(i);
vis2[i] = 1;
}
}
}
}