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;
}
}