https://www.acmicpc.net/problem/2644
특정 노드 사이의 촌수를 계산해주면 된다.
주어지는 정보들을 그래프로 표현해보면, 결국 촌수는 정점과 정점사이의 최단거리이다.
따라서 BFS를 활용하여 구현한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #pragma warning(disable :4996) #include<iostream> #include<queue> using namespace std; int grp[101][101]; //1-indexed int vis[101]; //양수면 방문한 것 queue<int> q; int n, st, en, m; //n명의 사람, m개의 관계 void bfs() { q.push(st); vis[st]++; while (!q.empty()) { int qs = q.size(); while (qs--) { int cur = q.front(); q.pop(); for (int i = 1; i <= n; i++) { if (grp[cur][i] != 1 || vis[i] >= 0) continue; q.push(i); vis[i] = vis[cur] + 1; if (i == en) { //종료 조건 cout << vis[i]; return; } } } } cout << -1; // 연결이 되지 않은 것 } int main(void) { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> st >> en >> m; for (int i = 1; i <= m; i++) { int src, dst; cin >> src >> dst; grp[src][dst] = 1; grp[dst][src] = 1; //무방향성 } for (int i = 1; i <= n; i++) vis[i] = -1; //양수면 방문한 것으로 처리 bfs(); return 0; } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 1707번: 이분 그래프 (C++) (0) | 2019.09.25 |
---|---|
백준 1389번: 케빈 베이컨의 6단계 법칙 (C++) (0) | 2019.09.25 |
백준 11724번: 연결 요소의 개수 (C++) (0) | 2019.09.25 |
백준 11403번: 경로 찾기 (C++) (0) | 2019.09.25 |
백준 1152번: 단어의 개수 (C++) (0) | 2019.09.20 |