グラフ構造の入力メニュー【隣接行列の出力(無向グラフ,有向グラフ)・隣接行列の入力(辺の個数,辺の存在判定)】
【STEP: 1】コード
reader.on('close', () => {
function adjacency_Matrix(a, b) { // 隣接行列の値を更新
Matrix[a][b]++;
Matrix[b][a]++;
}
const Matrix = []; // 隣接行列
const [N, M] = lines[0].split(' ').map(Number);
for (let i = 0; i < N; i++) {
Matrix[i] = new Array(N).fill(0);
}
for (let i = 1; i <= M; i++) {
const [A, B] = lines[i].split(' ').map(e => e - 1);
adjacency_Matrix(A, B);
}
// console.table(Matrix);
Matrix.forEach(value => {
console.log(value.join(' '));
});
});
いくつかの頂点と それらのうち 2 つの頂点を結ぶ辺の集合をグラフ(辺に向きがつけられていない場合は無向グラフ)。
だそうです。
木のメニューを先にクリアしたので すぐにできた。こっちを先にすべきだったのかな
【STEP: 2】コード
reader.on('close', () => {
function adjacency_Matrix(a, b) { // 隣接行列の値を更新
Matrix[a][b]++;
// Matrix[b][a]++; // 有向なので b→a 方向には繋がらない
}
const Matrix = []; // 隣接行列
const [N, M] = lines[0].split(' ').map(Number);
for (let i = 0; i < N; i++) {
Matrix[i] = new Array(N).fill(0);
}
for (let i = 1; i <= M; i++) {
const [A, B] = lines[i].split(' ').map(e => e - 1);
adjacency_Matrix(A, B);
}
// console.table(Matrix);
Matrix.forEach(value => {
console.log(value.join(' '));
});
});
辺に向きがつけられている場合は有向グラフ。
【STEP: 3】コード
reader.on('close', () => {
const Matrix = []; // 隣接行列
const N = Number(lines[0]);
for (let i = 1; i <= N; i++) {
Matrix.push(lines[i].split(' ').map(Number));
}
// console.table(Matrix);
let connected = 0; Matrix.forEach(value => {
connected += value.reduce((acc, cur) => acc + cur);
});
console.log(connected / 2);
});
辺の数 = 頂点の数の総数 ÷ 2
【FINAL】コード
reader.on('close', () => {
const Matrix = []; // 隣接行列
const [N, Q] = lines[0].split(' ').map(Number);
for (let i = 1; i <= N; i++) {
Matrix.push(lines[i].split(' ').map(Number));
}
for (let i = N + 1; i <= N + Q; i++) {
const [A, B] = lines[i].split(' ').map(e => e - 1);
console.log(Matrix[A][B]);
}
// console.table(Matrix);
});
与えられた隣接行列の情報を Matrix (配列)で受け取り Matrix[A][B]
の値を出力すればOK。
コメント