重みあり有向グラフの隣接行列と隣接リスト (paizaランク B 相当)
解答例
隣接リストを作成する際、重みkを()の中に入れ、配列にします。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//頂点の数 N と、辺の数 M
const [N, M] = lines[0].split(" ").map(Number);
//隣接行列g
let g = Array(N).fill(0).map(v => v = Array(N).fill(0));
//隣接リストh
let h = Array(N).fill(0).map(v => v = []);
for (let i = 1; i <= M; i++) {
//各辺の両端の頂点 a_i , b_i と、その辺の重み k_i
const [a, b, k] = lines[i].split(" ").map(Number);
//隣接配列
g[a - 1][b - 1] = k;
//隣接リスト
h[a - 1].push([b - 1, "(" + k + ")"]);
}
//隣接行列を出力
console.log(g.map(row => row.join("")).join("\n"));
//隣接リストの各行の頂点番号は昇順にソートして出力
console.log(
h.map(row => row.sort((a, b) => a[0] - b[0])//頂点番号で昇順ソート
.map(elm => elm.join(""))//b-1とkをjoin
.join(""))//(b-1,k)と(b-1,k)をjoin
.join("\n")//各頂点を改行区切り
);