728x90
1. 문제
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 길이가 양수인 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
2. 풀이
중간 노드가 될 지점을 가장 바깥 반복문으로 놓고, 시작지점, 끝지점을 i,j로 설정한다.
각 노드별 모든 거리를 살펴보면서 길이 이어져있는지(=경로가 있는지) 체크한다.
import java.io.*;
import java.util.*;
public class BOJ_11403_경로찾기 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
int[][] matrix = new int[N][N];
//입력
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine());
for (int j = 0; j < N; j++) {
matrix[i][j] = Integer.parseInt(st.nextToken());
}
}
//탐색-플로이드워셜
for (int k = 0; k < N; k++) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(matrix[i][j]==1) continue;
matrix[i][j] = matrix[i][k] & matrix[k][j];
}
}
}
//출력
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(matrix[i][j]).append(' ');
}
sb.append('\n');
}
System.out.print(sb);
}
}
3. 결과
1년 전에 풀었던 문제를 다시 풀었더니 틀렸다. 역시 사람은 주기적으로 복습을 해야한다. ^_^..
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 15666 N과 M (12) - JAVA (0) | 2023.07.22 |
---|---|
[BOJ] 14938 서강 그라운드 - JAVA (0) | 2023.07.21 |
[BOJ] 11779 최소 비용 구하기 2 - JAVA (0) | 2023.07.19 |
[BOJ] 1504 특정한 최단 경로 - JAVA (0) | 2023.07.18 |
[BOJ] 13172 Σ - JAVA (0) | 2023.07.17 |
댓글