Algorithm

[Algorithm] 백준 알고리즘 11403 (경로 찾기)

HONGNEW 2020. 3. 28. 14:55

java 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class FindRute {
	static int N;
	static int map[][];
	static boolean visited[][];
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N=Integer.parseInt(st.nextToken());
		map = new int[N][N];
	
		for(int i=0; i<N;i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=0; j<N;j++) {
				map[i][j]=Integer.parseInt(st.nextToken());
			}
		}
		for(int i=0; i<N;i++) {
			for(int j=0; j<N;j++) {
				if(map[i][j]==1) {
					System.out.print(1+" ");
				}else {
				System.out.print(solve(i, j)+" ");
				}
			}
			System.out.println();
		}
		
	}
	static int solve(int i, int j) {
		Queue <int []> q = new LinkedList<>();
		visited = new boolean[N][N];
		
		for(int a=0;a<N;a++) {
			if(map[i][a]==1) {
				q.add(new int[] {i, a});
				visited[i][a]=true;
			}
		}
		
		while(!q.isEmpty()) {
			
			int location[]=q.poll();
			int x=location[0];
			int y=location[1];
			
			if(y==j) {
				return 1;
			}
			
			for(int a=0; a<N;a++) {
				if(map[y][a]==1&&y!=x&&!visited[y][a]) {
					q.add(new int[] {y, a});
					visited[y][a]=true;
				}
			}
		}
		return 0;
		
	}
}