알고리즘
- 그래프 이론
- 그래프 탐색
- 최단 경로
- 플로이드–워셜

int N=Integer.parseInt(br.readLine());
int[][] arr= new int[N][N];
for(int i=0;i<N;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
arr[i][j]= Integer.parseInt(st.nextToken());
}
}
// i->j = i->k->j
for (int i = 0; i < N; i++) {
for (int k = 0; k < N; k++) {
for (int j = 0; j < N; j++) {
// 단순히 갈 수 있는 경로가 있는지만 체크함.
if (arr[i][k] == 1 && arr[k][j] == 1) {
arr[i][j] = 1;
}
}
}
}
for(int i=0;i<N;i++) {
String out="";
for (int j = 0; j < N; j++) {
out+=(arr[i][j]+" ");
}
System.out.println(out);
}
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());
int[][] arr= new int[N][N];
for(int i=0;i<N;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
arr[i][j]= Integer.parseInt(st.nextToken());
}
}
// i->j = i->k->j
for (int i = 0; i < N; i++) {
for (int k = 0; k < N; k++) {
for (int j = 0; j < N; j++) {
// 단순히 갈 수 있는 경로가 있는지만 체크함.
if (arr[i][k] == 1 && arr[k][j] == 1) {
arr[i][j] = 1;
}
}
}
}
for(int i=0;i<N;i++) {
String out="";
for (int j = 0; j < N; j++) {
out+=(arr[i][j]+" ");
}
System.out.println(out);
}
}
}