์ค๋ฒ1 : ์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ด๋ค.
์๊ฐ
- ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ค.
 - ๊ฐ์ค์น๋ ์์์ด์ ๋์ผ
 - ์ ์  ๊ฐ์ 100๊ฐ
 
๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ผ ํ๋ค๋ ์ ์์ ํ๋ฃจ์ด๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ณ , ์๊ณ ๋ฆฌ์ฆ์๋ ํต๊ณผํ ๋ ธ๋ ๊ฐ์์ด๋ฏ๋ก ์งํํ๋ค. (์ ํ์๊ฐ 1์ด)
Code
import sys
 
 
def read_input():
    n = int(sys.stdin.readline().rstrip())
    w = [
        [int(x) if int(x) != 0 else 100000 for x in sys.stdin.readline().split()]
        for y in range(n)
    ]
    d = w
    p = [[int(0) for x in range(n)] for y in range(n)]
    return n, w, d, p
 
 
def allShortestPath(n, w, d, p):
    for k in range(n):
        for i in range(n):
            for j in range(n):
                if d[i][j] > d[i][k - 1] + d[k - 1][j]:
                    p[i][j] = k
                    d[i][j] = d[i][k - 1] + d[k - 1][j]
    for i in range(n):
        for j in range(n):
            if d[i][j] == 100000:
                d[i][j] = 0
            else:
                d[i][j] = 1
    return d, p
 
 
def path(start, end, p):
    return
 
 
def printOutput(mat):
    n = len(mat)
    m = len(mat[0])
 
    for i in range(n):
        for j in range(m):
            print(mat[i][j], end=" ")
        print()
 
n, w, d, p = read_input()
d, p = allShortestPath(n, w, d, p)
printOutput(d)