촌수계산2644

LJM·2023년 2월 10일
0

백준풀기

목록 보기
84/259

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

너비우선탐색
visit 배열에 촌수 기록

어렵지 않게 풀었다

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

public class Main
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        String[] input = br.readLine().split(" ");

        int fp = Integer.parseInt(input[0]);
        int sp = Integer.parseInt(input[1]);

        int rc = Integer.parseInt(br.readLine());

        ArrayList<ArrayList<Integer>> graph= new ArrayList<>();
        for(int i = 0; i < n+1; ++i)
            graph.add(new ArrayList<>());

        int[] visit = new int[n+1];
        Arrays.fill(visit, -1);

        for(int i = 0; i < rc; ++i)
        {
            input = br.readLine().split(" ");
            graph.get(Integer.parseInt(input[0])).add(Integer.parseInt(input[1]));
            graph.get(Integer.parseInt(input[1])).add(Integer.parseInt(input[0]));
        }

        bfs(fp, sp, graph, visit);
    }

    private static void bfs(int fp, int sp, ArrayList<ArrayList<Integer>> graph, int[] visit)
    {
        Queue<Integer> que = new LinkedList<>();

        que.add(fp);
        visit[fp] = 0;

        while(que.isEmpty() == false)
        {
            int cur = que.poll();

            ArrayList<Integer> curNode = graph.get(cur);
            for(int element : curNode)
            {
                if(visit[element] == -1)
                {
                    que.add(element);
                    visit[element] = visit[cur]+1;

                    if(element == sp)
                    {
                        System.out.println(visit[element]);
                        return;
                    }
                }
            }
        }
        System.out.println(-1);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글