#include <iostream>
#include <vector>
#define INF 1e9 //๋ฌดํ์ ๋ปํ๋ ๊ฐ์ผ๋ก 10์ต์ ์ ์
using namespace std;
int n, m; //n=๋์์ ๊ฐ์, m=๋ฒ์ค์ ๊ฐ์
int graph[101][101];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < 101; i++) { //์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ์ ๋ชจ๋ ๋ฌดํ์ ์ด๊ธฐํ
fill(graph[i], graph[i]+101, INF);
}
for (int a = 1; a <= n; a++) { //์๊ธฐ ์์ ์์ ์๊ธฐ ์์ ์ผ๋ก ๊ฐ๋ ๋น์ฉ์ 0์ผ๋ก ์ด๊ธฐํ.
for (int b = 1; b <= n; b++) {
if (a == b) graph[a][b] = 0;
}
}
for (int i = 0; i < m; i++) { //๊ฐ์ ์ ๋ณด ์
๋ ฅ.
int a, b, c; cin >> a >> b >> c;
//a์์ b๋ก ๊ฐ๋ ๋น์ฉ์ c
graph[a][b] = min(graph[a][b], c); // ์์๋
ธ์ ๊ณผ ๋์ฐฉ๋
ธ์ ์ด ์ฌ๋ฌ๊ฐ์ผ์ ์์ผ๋, ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ๊ฐฑ์
}
for (int k = 1; k <= n; k++) { //ํ๋ก์ด๋-์์ฌ ์๊ณ ๋ฆฌ์ฆ ์ํ
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]);
}
}
}
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= n; b++) {
if (graph[a][b] == INF) cout << 0 << ' ';
else cout << graph[a][b] << ' ';
}
cout << "\n";
}
}
๋๊ธ