-
[백준/BOJ] 1260번 DFS와 BFS (C++)알고리즘 문제풀이/백준 2020. 12. 29. 21:20
그래프에서의 DFS와 BFS를 연습할 수 있는 좋은 문제입니다. 인접 행렬 혹은 인접 리스트를 이용해서 그래프를 만들 수 있는데, 저는 인접 리스트를 이용했습니다.
※ 인접 행렬과 인접 리스트의 차이점이 궁금했었는데 잘 설명한 블로그 글이 있어 주소를 남겨봅니다!
#include <iostream> #include <vector> #include <queue> #include <cstring> #include <algorithm> using namespace std; int n, m, v; vector<int> graph[1001]; bool visit[1001]; void BFS(int idx) { memset(visit, false, sizeof(visit)); queue<int> q; q.push(idx); visit[idx] = true; while(!q.empty()) { int now = q.front(); q.pop(); cout<<now<<" "; for(int i = 0; i < graph[now].size(); i++) { int next = graph[now][i]; if(!visit[next]) { q.push(next); visit[next] = true; } } } } void DFS(int idx) { visit[idx] = true; cout<<idx<<" "; for(int i = 0; i < graph[idx].size(); i++) { int next = graph[idx][i]; if(!visit[next]) DFS(next); } } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>v; while(m--) { int x, y; cin>>x>>y; graph[x].push_back(y); graph[y].push_back(x); } for(int i = 1; i <= n; i++) { sort(graph[i].begin(), graph[i].end()); // 인접리스트 오름차순 정렬 } DFS(v); cout<<"\n"; BFS(v); }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 1238번 파티 (C++) (0) 2020.12.30 [백준/BOJ] 1929번 소수 구하기 (C++) (0) 2020.12.29 [백준/BOJ] 9095번 1, 2, 3 더하기 (C++) (0) 2020.12.28 [백준/BOJ] 1182번 부분수열의 합 (C++) (0) 2020.12.28 [백준/BOJ] 6603번 로또 (C++) (0) 2020.12.28