"use strict";
class Queue {
constructor() {
this.dataStore = [];
}
enqueue (element) {
this.dataStore.push(element);
};
dequeue () {
return this.dataStore.shift();
};
front () {
return this.dataStore[0];
};
back () {
return this.dataStore[this.dataStore.length - 1];
};
toString() {
return this.dataStore.join("\n");
};
isEmpty (){
return this.dataStore.length == 0;
}
}
class Graph {
constructor() {
this.vertices = [];
this.edges = new Map();
};
addVertex(vertex) {
this.vertices.push(vertex);
this.edges.set(vertex, []);
};
addEdge(vertexFrom, vertexTo) {
if (this.edges.has(vertexFrom) && this.edges.has(vertexTo)) {
this.edges.get(vertexFrom).push(vertexTo);
this.edges.get(vertexTo).push(vertexFrom);
}
};
removeVertex(vertex) {
// remove edges
for (let vert in this.edges.get(vertex)) {
this.removeEdge(vert, vertex);
}
this.edges.delete(vertex);
// remove vertex
let index = this.vertices.indexOf(vertex);
this.vertices.splice(index, 1);
};
removeEdge(vertexFrom, vertexTo) {
if ((this.edges.has(vertexFrom)) && (this.edges.has(vertexTo))) {
let index;
index = this.edges.get(vertexFrom).indexOf(vertexTo);
this.edges.get(vertexFrom).splice(index, 1);
index = this.edges.get(vertexTo).indexOf(vertexFrom);
this.edges.get[vertexTo].splice(index, 1);
}
};
bfs(v, action) {
let colors = new Map();
this.vertices.forEach(item => colors.set(item, "white"));
var queue = new Queue();
queue.enqueue(v);
while (!queue.isEmpty()) {
var vertex = queue.dequeue();
// додати всі білі вершини до черги і позначити їх сірими
let neighbours = this.edges.get(vertex);
for (let index in neighbours) {
if (colors.find(neighbours[index]) === "white") {
queue.enqueue(neighbours[index]);
colors.set(neighbours[index], "grey");
}
}
// обробити вершину
action(vertex);
// позначити вершину чорною
colors.set(vertex, "black");
}
}
// for debug purposes
printData() {
console.log("Vertices -------------------");
console.log(this.vertices.join());
console.log("Edges ----------------------");
this.edges.forEach((value, key) => console.log(key + "--->" + value.join()));
}
}
const graph = new Graph();
graph.addVertex("1");
graph.addVertex("2");
graph.addVertex("3");
graph.addVertex("4");
graph.addVertex("5");
graph.addVertex("6");
graph.addVertex("7");
graph.addVertex("8");
graph.addVertex("9");
graph.printData();
graph.addEdge("1", "2");
graph.addEdge("1", "7");
graph.addEdge("1", "8");
graph.addEdge("2", "3");
graph.addEdge("2", "6");
graph.addEdge("3", "4");
graph.addEdge("3", "5");
graph.addEdge("8", "9");
graph.addEdge("8", "12");
graph.addEdge("9", "10");
graph.addEdge("9", "11");
graph.printData();
graph.removeEdge("9", "11");
graph.printData();
Comments