백준 2664 촌수계산 C++ 풀이
촌수 관계는 트리 형태이지만, 이를 양방향 그래프로 치환하여 dfs로 풀 수 있다.
만약 p와 c가 같다면, 그래프가 연결되어 있는 것이므로, ans 전역변수에 정답을 저장한다.
한번 dfs가 호출될 때 마다 노드 p에 연결된 미리 방문하지 않은 인접한 노드와, cnt를 1증가한 값을 인자로 dfs를 호출한다.
ans를 -1로 초기화 해주었기 때문에, 한번도 업데이트가 되지 않은 경우 가족이 아니기 때문에 초기값 -1을 그대로를 출력하게 된다.
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
|
#include <iostream>
#include <vector>
#include <queue>
#include <string.h>
#include <cmath>
using namespace std;
vector<int> arr[101];
int memo[101];
int ans = -1;
void dfs(int p, int c, int cnt){
//cout <<"p "<<p<<" c "<< c<<" cnt: "<<cnt<<endl;
memo[p] = 1;
if(c==p){ans = cnt;return cnt;}
int z = cnt;
for(int i=0; i<arr[p].size(); i++){
if(memo[arr[p][i]]==0){
dfs(arr[p][i],c, cnt+1);
}
}
return;
}
int main(){
int n, m;
int x,y;
int a,b;
cin>>n>>x>>y>>m;
for(int i=0; i<m; i++){
cin>> a>>b;
arr[a].push_back(b);
arr[b].push_back(a);
}
dfs(x,y,0);
cout <<ans<<endl;
}
|
cs |
'Problem Solving > 백준' 카테고리의 다른 글
백준 BOJ 15591 풀이 (JAVA) (0) | 2022.05.30 |
---|---|
백준 16236 아기상어 C++ 풀이 (4) | 2021.04.27 |
[백준] 14889:스타트와 링크 C++ 풀이 (1) | 2019.10.14 |
[백준] 1003번: 피보나치 함수 풀이 (0) | 2019.09.04 |