경로 찾기
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 256 MB | 28810 | 16029 | 11369 | 54.952% |
문제
가중치 없는 방향 그래프 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 복사
3 0 1 0 0 0 1 1 0 0
예제 출력 1 복사
1 1 1 1 1 1 1 1 1
예제 입력 2 복사
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 복사
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter import java.lang.Integer.max import java.lang.Integer.min val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStreamWriter(System.out)) val n = readLine()!!.toInt() val graph = MutableList(n,{mutableListOf<Int>()}) fun main()=with(br){ for(i in 0 until n) { graph[i]=readLine()!!.split(" ").map{it.toInt()}.toMutableList() } for(i in 0 until n){ for(j in 0 until n){ for(k in 0 until n){ if(graph[j][i]==1 && graph[i][k]==1) // 1,0 0,1 의 길이 존재하면 0,0도 길이 존재함 //0,0 / 1,1/ 2,2 같은 경우에 왜 그렇게 되는지 이해가 잘 안된다. graph[j][k]=1 } } } for(i in 0 until n){ for(j in 0 until n){ bw.write("${graph[i][j]} ") } bw.write("\n") } bw.flush() bw.close() } | cs |
'알고리즘 공부 > hashmap , 자료구조' 카테고리의 다른 글
백준 1991 트리 순회 with Kotlin (0) | 2021.08.28 |
---|---|
백준 9663번 with Kotlin (0) | 2021.08.23 |
PQ도 자신에 입맛에맞게 순서를 지정가능 (0) | 2021.08.19 |
백준11286번 with Kotlin (0) | 2021.08.16 |
백준 5430번 With Kotlin (0) | 2021.08.14 |