https://www.acmicpc.net/problem/2644
풀이
입력으로 전달받은 x, y 의 촌수를 구하는 것은 바꾸어말하면 x, y 사이의 간선의 갯수를 구하면 된다.
이를 depth 라고 표현하였으며 풀이 방법은 아래와 같다.
1. 입력으로 전달받은 각 부모, 자식들을 인접리스트로 구성한다.
2. 방문을 시작하기 전에 x를 queue 에 삽입한 뒤, bfs 로 각 node 를 방문한다.
3. 현재 방문한 사람(cur)의 인접한 사람(node)들의 depth 를 저장한다.
현재 방문한 사람의 depth + 1 이 인접한 사람의 depth 가 된다.
4. 마지막으로 y 의 값을 출력한다.
#include <iostream>#include <cstring>#include <vector>#include <queue>#define MAX 100using namespace std;bool visit[MAX + 2] = {false, };int depth[MAX + 2] = {0, };int main(){queue<int> q;int n, m, from, to, parent, child, start;bool find = false;scanf("%d", &n);vector<int>v [n+2];for (int i = 1; i <= n; ++i) {depth[i] = -1;}scanf("%d %d", &from, &to);scanf("%d", &m);for (int i = 1 ; i <= m; ++i) {scanf("%d %d", &parent, &child);v[parent].push_back(child);v[child].push_back(parent);}q.push(from);depth[from] = 0;visit[from] = true;while(!q.empty()) {int cur = q.front();q.pop();int len = v[cur].size();for (int i = 0 ; i < len; ++i) {int node = v[cur][i];if (!visit[node]) {visit[node] = true;q.push(node);depth[node] = depth[cur] + 1;}}}printf("%d\n", depth[to]);return 0;}
'알고리즘 풀이' 카테고리의 다른 글
백준 9465번 스티커 (0) | 2018.06.14 |
---|---|
백준 7562번 나이트의 이동 (0) | 2018.06.13 |
백준 14501번 퇴사 (0) | 2018.06.11 |
백준 15686번 치킨배달 (0) | 2018.06.07 |
백준 2455번 지능형 기차 (0) | 2018.06.05 |