๐ŸŽฒ ๋ฐฑ์ค€ 11780๋ฒˆ ํ”Œ๋กœ์ด๋“œ 2

Jeongeunยท2023๋…„ 12์›” 14์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
143/187

๋ฐฑ์ค€ 11780๋ฒˆ

๐Ÿงธ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“ ๋‹ค.
๐Ÿ’Š 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);
  }
}

0๊ฐœ์˜ ๋Œ“๊ธ€