정점과 간선으로 구성되어 네트워크 구조를 추상화한 비선형 자료 구조


정점의 경우 Node를 의미하며, 간선은 Node끼리의 연결을 의미한다.
class Graph {
constructor() {
this.edge = {};
}
addVertex(v) {
this.edge[v] = [];
}
addEdge(v1,v2) {
this.edge[v1].push(v2);
}
}
removeVertex(v) {
if (this.edge[v] === undefined) return;
let length = this.edge[v].length;
let connectedVertex = [...this.edge[v]];
for (let i = 0; i < length; i++) {
this.removeEdge(v, connectedVertex[i]);
}
}
removeEdge(v1, v2) {
if (this.edge[v1]) {
let idx = this.edge[v1].indexOf(v2);
if (idx != -1) {
this.edge[v1].splice(idx, 1);
}
if (this.edge[v1].length === 0) {
delete this.edge[v1];
}
}
}
sizeVertex () {
return Object.keys(this.edge).length;
}
sizeEdge (vertex) {
return this.edge[vertex] ? Object.keys(this.edge[vertex].length) : 0;
}
print () {
for (let vertex in this.edge) {
let neighbors = this.edge[vertex];
if (neighbors.length === 0) continue;
process.stdout.write(`${vertex} -> `);
for (let i = 0; i < neighbors.length; ++i) {
process.stdout.write(`${neighbors[i]} `);
}
console.log("");
}
}
addEdge(v1,v2) {
this.edge[v1].push(v2);
this.edge[v2].push(v1);
}
removeEdge(v1, v2) {
if (this.edge[v1]) {
let idx = this.edge[v1].indexOf(v2);
if (idx != -1) {
this.edge[v1].splice(idx, 1);
}
if (this.edge[v1].length === 0) {
delete this.edge[v1];
}
}
if (this.edge[v2]) {
let idx = this.edge[v2].indexOf(v1);
if (idx != -1) {
this.edge[v2].splice(idx, 1);
}
if (this.edge[v2].length === 0) {
delete this.edge[v2];
}
}
}
관련 전체 코드는 Git에 업로드 해두었습니다.
Github_Graph
Github_Graph No Direction