Jun's Development Journey

[BOJ] 2644 촌수계산 본문

BOJ/DFS

[BOJ] 2644 촌수계산

J_Jayce 2021. 2. 23. 11:10

문제

www.acmicpc.net/problem/2644

 

2644번: 촌수계산

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

www.acmicpc.net

풀이

import java.io.*;
import java.util.*;

public class Main {
    static boolean[][] cs;
    static boolean[] visited;
    static int cnt=-1;
    static void cs_dfs(int st, int dt, int N, int c) {
    	if(st==dt) {
    		cnt = c;
    		return;
    	}
    	for(int i=1;i<N+1;i++) {
    		if(cs[st][i] && !visited[i]) {
    			visited[i] = true;
    			cs_dfs(i,dt,N,c+1);
    			visited[i] = false;
    		}
    	}
    }
	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N, cp1,cp2,m;
        StringTokenizer st;
        N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine()," ");
        cp1 = Integer.parseInt(st.nextToken());
        cp2 = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(br.readLine());
        cs = new boolean[N+1][N+1];
        visited = new boolean[N+1];
        for(int i=0;i<m;i++) {
        	st = new StringTokenizer(br.readLine()," ");
        	int from = Integer.parseInt(st.nextToken());
        	int to = Integer.parseInt(st.nextToken());
        	cs[from][to] = cs[to][from] = true;
        }
        
        cs_dfs(cp1,cp2,N,0);
        System.out.println(cnt);
    }
} 

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

[BOJ] 1260 DFS, BFS  (0) 2021.02.26
[BOJ] 2606번 바이러스  (0) 2021.02.18
[BOJ] 11724번 연결 요소의 갯수  (0) 2019.08.30
[BOJ] 11403번 경로 찾기  (0) 2019.08.30
[BOJ] 14502번 연구소  (0) 2019.07.30