๐ ๋ฌธ์
n(1 ≤ n ≤ 100)๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ m(1 ≤ m ≤ 100,000)๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค. ๊ฐ ๋ฒ์ค๋ ํ ๋ฒ ์ฌ์ฉํ ๋ ํ์ํ ๋น์ฉ์ด ์๋ค.
๋ชจ๋ ๋์์ ์ (A, B)์ ๋ํด์ ๋์ A์์ B๋ก ๊ฐ๋๋ฐ ํ์ํ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ m์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ m+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๋ฒ์ค์ ์ ๋ณด๋ ๋ฒ์ค์ ์์ ๋์ a, ๋์ฐฉ ๋์ b, ํ ๋ฒ ํ๋๋ฐ ํ์ํ ๋น์ฉ c๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์์ ๋์์ ๋์ฐฉ ๋์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค. ๋น์ฉ์ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
๐์ถ๋ ฅ
๋จผ์ , n๊ฐ์ ์ค์ ์ถ๋ ฅํด์ผ ํ๋ค. i๋ฒ์งธ ์ค์ ์ถ๋ ฅํ๋ j๋ฒ์งธ ์ซ์๋ ๋์ i์์ j๋ก ๊ฐ๋๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ด๋ค. ๋ง์ฝ, i์์ j๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์๋ฆฌ์ 0์ ์ถ๋ ฅํ๋ค.
๊ทธ ๋ค์์๋ n×n๊ฐ์ ์ค์ ์ถ๋ ฅํด์ผ ํ๋ค. i×n+j๋ฒ์งธ ์ค์๋ ๋์ i์์ ๋์ j๋ก ๊ฐ๋ ์ต์ ๋น์ฉ์ ํฌํจ๋์ด ์๋ ๋์์ ๊ฐ์ k๋ฅผ ์ถ๋ ฅํ๋ค. ๊ทธ ๋ค์, ๋์ i์์ ๋์ j๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค. ์ด๋, ๋์ i์ ๋์ j๋ ์ถ๋ ฅํด์ผ ํ๋ค. ๋ง์ฝ, i์์ j๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ 0์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4
์์ ์ถ๋ ฅ
0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0
0
2 1 2
2 1 3
2 1 4
3 1 3 5
4 2 4 5 1
0
5 2 4 5 1 3
2 2 4
3 2 4 5
2 3 1
3 3 5 2
0
2 3 4
2 3 5
3 4 5 1
3 4 5 2
4 4 5 1 3
0
2 4 5
2 5 1
2 5 2
3 5 1 3
3 5 2 4
0
๐ ๋ฌธ์ ํ์ด
๋ฌธ์ ์ ์ถ๋ ฅ์ด ์กฐ๊ธ ๊ธธ์ด์ ์ด๋ฒ์๋ ํน๋ณํ ์์ ์ถ๋ ฅ์ ๋ฃ์๋ค.
๋ฌธ์ ์ ๋ชฉ์ ํํธ๊ฐ ์๋๋ฐ ์ด ๋ฌธ์ ๋ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ํ์ด๋ฅผ ์งํํ๋ฉด ๋๋ค.
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋ค์ ๊ธ์ ์ฝ๊ณ ๋ค์ ์ด ๊ธ์ ์ฝ์ด๋ณด๊ธธ ๊ถ์ ํ๋ค.
[์๊ณ ๋ฆฌ์ฆ] ํ๋ก์ด๋ ์์
๊ทธ๋ผ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ผ๋ก n๊ฐ์ ์ค์ ๊ฑธ์ณ i์์ j๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ถ๋ ฅํ ์ ์๋ค.
์ด์ ์ง๋๊ฐ๋ ๋๋ก์ ๊ฐฏ์์ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
i์์ j๋ก ๊ฐ ๋ ๋ฌด์กฐ๊ฑด ์ง๋๊ฐ๋ ๋ ธ๋๋ ์์์ ์ธ i์ ๋์ฐฉ์ ์ธ j์ด๋ค. ๋๋ฌธ์ ์ด ๋์ ๊ฒฝ๋ก ๋ฐฐ์ด์ ์ถ๊ฐํ์ง ์๊ณ ๋์ค์ ์ถ๋ ฅํ ๋ ์ฒ๋ฆฌํ์๋ค. i์ j๋ก ๊ฐ๋ ์ต๋จ๊ฒฝ๋ก๊ฐ ์ด๋ ๊ฑฐ์ณ ๊ฐ๋ ๊ฒ์ด ์๋๊ณ i->j ๋ผ๋ฉด ๋์ ๊ฒฝ๋ก ๋ฐฐ์ด์ [] ์ ๋ฐํ ํ ๊ฒ์ด๋ค.
๋ง์ฝ i์์ j์ ์ต๋จ๊ฒฝ๋ก๊ฐ i-> x -> j ๋ผ๋ฉด ๊ฒฝ๋ก ๋ฐฐ์ด์ [x]๊ฐ ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ฒดํฌํด์ฃผ๋ ๋ถ๋ถ์ graph[i][j] < graph[i][x] + graph[x][j] ์ผ ๋ ๊ฒฝ๋ก ๋ฐฐ์ด์ i์์ x๋ก ๊ฐ๋ ๊ฒฝ๋ก์ x, ๊ทธ๋ฆฌ๊ณ x์์ j๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
route[i][j] = route[i][x] + [x] + route[x][j]
์ด๋ ๊ฒ ๊ฒฝ๋ก๊น์ง ์ ์ ์ฅํด์ฃผ๊ณ ์ถ๋ ฅํ ๋ len(๊ฒฝ๋ก) + 2,(+2 ํ ์ด์ ๋ ์ถ๋ฐ๊ณผ ๋์ฐฉ ๋ ธ๋)์ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๊ณ ๋ง์ฝ ๋๋ฌํ ์ ์๋ค๋ฉด 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 37 38 39 40 41 42 43 | import sys input = sys.stdin.readline INF = int(1e9) n = int(input()) m = int(input()) graph =[[INF]*(n+1) for _ in range(n+1)] route = [[[] for _ in range(n+1)] for _ in range(n+1)] for i in range(1, n+1): graph[i][i] = 0 # ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ for _ in range(m): a,b,c = map(int,input().split()) if graph[a][b] > c: graph[a][b] = c for x in range(1, n+1): for i in range(1, n+1): for j in range(1, n+1): if graph[i][x]+graph[x][j] < graph[i][j]: # ์ต๋จ๊ฒฝ๋ก ๋ณ๊ฒฝ์ graph[i][j] = graph[i][x]+graph[x][j] # ๊ฒฝ๋ก๋ ์๋ก ์ด๊ธฐํ ํด์ค route[i][j] = route[i][x][:] + [x] + route[x][j][:] # ๊ฐ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก ํ
์ด๋ธ for i in range(1, n+1): for j in range(1, n+1): print(graph[i][j] if graph[i][j] != INF else 0, end=' ') print() for i in range(1,n+1): for j in range(1,n+1): if i==j: # ๊ฐ์ ์๋ฆฌ print(0) elif graph[i][j] == INF: # ๋๋ฌํ ์ ์๋ค๋ฉด print(0) else: print(len(route[i][j])+2, i, *route[i][j], j) # ๊ธธ์ด, ์์, ๊ฒฝ๋ก, | cs |
๐ญ ์ํ์ฐฉ์ค
100%์์ ํ๋ ธ์ต๋๋ค ํ์ ์ ๋ฐ์ ์ด์ ๋ ๋๋ฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํด์ฃผ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ง๋ง์ผ๋ก ์ต์ ํ ๋ ์ฝ๋๋ ์์ ์ฝ๋์ ๊ฐ์๋ฐ ์ด์ ์ฝ๋๋
route[i][j] = route[i][x] + [x] + route[x][j] ์ด ๋ถ๋ถ์ for ๋ฌธ๊ณผ append๋ฅผ ์ฌ์ฉํด์ฃผ์์๋ค.
๐ ๋ฌธ์ ๋งํฌ ํ๋ก์ด๋ 2
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2887๋ฒ: ํ์ฑ ํฐ๋ - ํ์ด์ฌ (1) | 2022.10.05 |
---|---|
[๋ฐฑ์ค] 16932_๋ชจ์๋ง๋ค๊ธฐ - ํ์ด์ฌ (1) | 2022.09.30 |
[๋ฐฑ์ค] 14567๋ฒ: ์ ์๊ณผ๋ชฉ (Prerequisite) - ํ์ด์ฌ (0) | 2022.09.18 |
[๋ฐฑ์ค] 5427๋ฒ: ๋ถ - ํ์ด์ฌ (0) | 2022.09.11 |
[๋ฐฑ์ค] 2174๋ฒ: ๋ก๋ด ์๋ฎฌ๋ ์ด์ - ํ์ด์ฌ (0) | 2022.09.04 |