백준 18352 - 특정 거리의 도시 찾기

veloger·2022년 12월 26일
0

package test;

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

public class Q46p260 {
	static ArrayList<Integer> []list;
	static BufferedReader buf;
	static StringTokenizer st;
	static List<Integer> ans;
	static int visited[];
	
	private static void BFS(int start) {
		Queue<Integer> qu =new LinkedList<Integer>();
		qu.add(start);
		visited[start]++;
		while(!qu.isEmpty()) {
			int node=qu.poll();
			for(int i:list[node]) {
				if(visited[i] == -1) {
					visited[i] = visited[node]+1;
					qu.add(i);
				}
			}
		}	
	}
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		buf =new BufferedReader(new InputStreamReader(System.in));
		st =new StringTokenizer(buf.readLine());
		
		int numOfCities = Integer.parseInt(st.nextToken());
		int roads =Integer.parseInt(st.nextToken());
		int goal = Integer.parseInt(st.nextToken());
		int start = Integer.parseInt(st.nextToken());
		
		list = new ArrayList[numOfCities+1];
		ans=new ArrayList<Integer>();
		
		for(int i=0; i<list.length;i++) {
			list[i]=new ArrayList<Integer>();
		}
		
		for(int i=0;i<roads;i++) {
			st =new StringTokenizer(buf.readLine());
			int x=Integer.parseInt(st.nextToken());
			int y =Integer.parseInt(st.nextToken());
			list[x].add(y);
		}
		visited=new int[numOfCities+1];
		for(int i=0;i<=numOfCities;i++) {
			visited[i]=-1;
		}
		Arrays.fill(visited, -1);
		BFS(start);
		
		for(int i=0; i<=numOfCities; i++) {
			if(visited[i] == goal) {
				ans.add(i);
			}
		}
		if(ans.size()==0)
			System.out.println(-1);
		else {
			Collections.sort(ans);
			for(int temp:ans) {
				System.out.println(temp);
			}
		}
	}
	
}

0개의 댓글