๐งธ ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ํด์ง ์ ์๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค.
๐ Infinity๋ฅผ 0์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์ผํ๋ค!!
์ฝ๋
const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
const M = +input.shift();
input = input.map((el) => el.split(" ").map(Number));
const arr = Array.from(new Array(N + 1), () => new Array(N + 1).fill(Infinity));
const way = Array.from(new Array(N + 1), () => new Array(N + 1).fill([]));
for (let n = 1; n < N + 1; n++) {
arr[n][n] = 0;
}
for (let m = 0; m < M; m++) {
arr[input[m][0]][input[m][1]] = Math.min(
arr[input[m][0]][input[m][1]],
input[m][2]
);
}
const floydWarshall = () => {
for (let k = 1; k < N + 1; k++) {
for (let i = 1; i < N + 1; i++) {
for (let j = 1; j < N + 1; j++) {
if (arr[i][k] + arr[k][j] < arr[i][j]) {
arr[i][j] = arr[i][k] + arr[k][j];
//๊ฒฝ๋ก ์ ์ฅ
way[i][j] = [...way[i][k], k, ...way[k][j]];
}
}
}
}
};
floydWarshall();
//์ต์ ๋น์ฉ ์ถ๋ ฅ
for (let i = 1; i < N + 1; i++) {
let string = "";
for (let j = 1; j < N + 1; j++) {
if (arr[i][j] === Infinity) {
string += 0 + " ";
continue;
}
string += arr[i][j] + " ";
}
console.log(string);
}
//๊ฒฝ๋ก ์ถ๋ ฅ
for (let i = 1; i < N + 1; i++) {
for (let j = 1; j < N + 1; j++) {
if (i === j || arr[i][j]===Infinity) {
console.log(0);
continue;
}
let string = way[i][j].length + 2 + " " + i + " ";
if (way[i][j].length) string += way[i][j].join(" ") + " ";
string += j;
console.log(string);
}
}