백준공부/java

[백준] 24444번 알고리즘 수업 - 너비 우선 탐색 1 (silver 2

gomduri43 2023. 9. 25. 15:59

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));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        HashMap<Integer , ArrayList<Integer>> dict=new HashMap<>();
        StringTokenizer st=new StringTokenizer(br.readLine());
        int n=Integer.valueOf(st.nextToken());
        int m=Integer.valueOf(st.nextToken());
        int s=Integer.valueOf(st.nextToken());
        int[] visit=new int[n+1];
        for(int i=0; i<m; i++){
            st=new StringTokenizer(br.readLine());
            int t1=Integer.valueOf(st.nextToken());
            int t2=Integer.valueOf(st.nextToken());
            if(dict.get(t1)==null){
                dict.put(t1, new ArrayList<>());
                dict.get(t1).add(t2);
            }
            else{
                dict.get(t1).add(t2);
            }
            if(dict.get(t2)==null){
                dict.put(t2,new ArrayList<>());
                dict.get(t2).add(t1);
            }
            else{
                dict.get(t2).add(t1);
            }
        }
        Queue<Integer> que=new LinkedList<>();
        int nth=1;
        visit[s]=nth;
        nth++;
        que.offer(s);
        while(!que.isEmpty()){
            int temp=que.poll();
            ArrayList<Integer> arr=dict.get(temp);
            Collections.sort(arr);
            for(int i=0; i<arr.size(); i++){
                if(visit[arr.get(i)]==0){
                    visit[arr.get(i)]=nth;
                    nth++;
                    que.offer(arr.get(i));
                }
            }
        }
        for(int i=1; i<=n; i++){
            bw.write(visit[i]+"\n");
        }
        bw.flush();
    }
}