경로 찾기
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 26854 | 14648 | 10375 | 53.798% |
문제
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다.
출력
총 N개의 줄에 걸쳐서 문제의 정답을 인접행렬 형식으로 출력한다. 정점 i에서 j로 가는 경로가 있으면 i번째 줄의 j번째 숫자를 1로, 없으면 0으로 출력해야 한다.
예제 입력 1 복사
xxxxxxxxxx
3
0 1 0
0 0 1
1 0 0
예제 출력 1 복사
xxxxxxxxxx
1 1 1
1 1 1
1 1 1
예제 입력 2 복사
xxxxxxxxxx
7
0 0 0 1 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 0 0
0 0 0 0 1 1 0
1 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 1 0 0 0 0
예제 출력 2 복사
xxxxxxxxxx
1 0 1 1 1 1 1
0 0 1 0 0 0 1
0 0 0 0 0 0 0
1 0 1 1 1 1 1
1 0 1 1 1 1 1
0 0 1 0 0 0 1
0 0 1 0 0 0 0
풀이
bfs, dfs로도 풀 수 있지만 모든 경로의 최단거리를 탐색하는 기법중 하나인 플로이드 와샬을 이용해서 풀엇습니다.
전체코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int n;
static int map[][];
static int ans[][];
static ArrayList<Integer>[] list;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
map = new int[n][n];
ans = new int[n][n];
for(int i=0; i<n; i++) {
String [] t = br.readLine().split(" ");
for(int j=0; j<n; j++) {
map[i][j] = Integer.parseInt(t[j]);
}
}
for(int k=0; k<n; k++) { // k = 경유
for(int i=0; i<n; i++) { // i = 출발
for(int j=0; j<n; j++) { // j = 도착
if(map[i][k]==1 && map[k][j]==1) {
map[i][j] = 1;
}
}
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
System.out.print(map[i][j]+" ");
}
System.out.println();
}
}
}
'알고리즘' 카테고리의 다른 글
[백준 1389] 케빈 베이컨의 6단계 법칙 -JAVA //le_effort (0) | 2021.04.01 |
---|---|
[백준 11404] 플로이드 - JAVA //le_effort (0) | 2021.03.30 |
[2018 KAKAO BLIND RECRUITMENT] 압축 //le_effort (0) | 2021.03.26 |
[2018 KAKAO BLIND RECRUITMENT] 파일명 정렬 //le_effort (0) | 2021.03.24 |
[2021 KAKAO BLIND RECRUITMENT] 순위 검색 - JAVA// le_effort (0) | 2021.03.22 |