[BAEKJOON] 2644번 촌수계산

2024. 4. 16. 14:18·Algorithm/DFS

https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

문제조건
  1. 부모 자식들간의 관계가 주어졌을때, 계산하고자 하는 두사람의 촌수를 구해라
접근방법

 

트리 모양 구조를 탐색하는 그래프 탐색 방법으로 접근했다.

근데 촌수 이므로 cycle이 생길 일은 없다.

따라서 각 노드를 양방향 연결해주고 DFS로 탐색해줬다. 아버지의 형제들과 나와의 관계는 3촌으로 분류할 수 있는데, 이를 계산하는 방식은 

나 → 아버지(1촌) → 할아버지(2촌) → 아버지형제(3촌)

이런식으로 계산되므로 DFS가 적합하다고 생각했다. 그리고 예외상황으로는 촌수를 계산할 수 없을 경우인데, DFS를 돌리고 한사람을 찾지 못하면 bool타입 변수를 두어 처리해줬다.

 

소스코드
#include <iostream>
using namespace std;

int n, m;
int a, b, relation[101][101], visited[101];
int res = -1;
bool pos = false;

void dfs(int s, int e, int cnt){
	visited[s] = 1;
	if(s == e){
		res = cnt;
		pos = true;
		return;
	}
	for(int i = 1; i <= n; i++){
		if(!visited[i] && relation[s][i] == 1){
			dfs(i, e, cnt+1);
			if(pos) break;
		}
	}
	return;
}

int main(){
	cin >> n;
	cin >> a >> b;
	cin >> m;
	for(int i = 1; i <= m; i++){
		int n1, n2;
		cin >> n1 >> n2;
		relation[n1][n2] = 1;
		relation[n2][n1] = 1;
	}
	dfs(a,b,0);
	cout << res;
}

'Algorithm > DFS' 카테고리의 다른 글

[BAEKJOON] 2668번 숫자고르기  (0) 2024.04.16
[BAEKJOON] 14891번 톱니바퀴  (0) 2024.04.09
[BAEKJOON] 12919번 A와 B 2  (0) 2024.03.21
[BAEKJOON] 2448번 별 찍기 - 11  (0) 2024.03.10
[BAEKJOON] 2250번 트리의 높이와 너비  (0) 2024.03.06
'Algorithm/DFS' 카테고리의 다른 글
  • [BAEKJOON] 2668번 숫자고르기
  • [BAEKJOON] 14891번 톱니바퀴
  • [BAEKJOON] 12919번 A와 B 2
  • [BAEKJOON] 2448번 별 찍기 - 11
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
[BAEKJOON] 2644번 촌수계산
상단으로

티스토리툴바