เราจะสร้างคลาสกราฟที่รองรับน้ำหนักและทั้งแบบกำกับและแบบไม่บอกทิศทาง สิ่งนี้จะดำเนินการโดยใช้รายการที่อยู่ติดกัน เมื่อเราเปลี่ยนไปใช้แนวคิดขั้นสูง ทั้งการถ่วงน้ำหนักและลักษณะการกำกับของกราฟจะมีประโยชน์อย่างยิ่ง
รายการที่อยู่ติดกันคืออาร์เรย์ A ของรายการที่แยกจากกัน องค์ประกอบของอาร์เรย์ Ai แต่ละรายการคือรายการ ซึ่งมีจุดยอดทั้งหมดที่อยู่ติดกับจุดยอด i เรากำลังกำหนดโดยใช้ 2 สมาชิก โหนดและขอบ
มาตั้งค่าคลาสกราฟโดยกำหนดคลาสของเราและวิธีการบางอย่างที่เราจะใช้เพื่อเพิ่มโหนดและขอบให้กับกราฟของเรา
เริ่มแรกเราจะกำหนดวิธีการดังต่อไปนี้ -
- addNode:เพิ่มโหนดให้กับกราฟ
- addEdge:เพิ่มขอบที่ไม่มีทิศทางให้กับกราฟ
- addDirectedEdge:เพิ่มขอบตรง
ตัวอย่าง
class Graph {
constructor() {
this.edges = {};
this.nodes = [];
}
addNode(node) {
this.nodes.push(node);
this.edges[node] = [];
}
addEdge(node1, node2) {
this.edges[node1].push(node2);
this.edges[node2].push(node1);
}
addDirectedEdge(node1, node2) {
this.edges[node1].push(node2);
}
display() {
let graph = ""; this.nodes.forEach(node => {
graph += node + "->" + this.edges[node].join(", ") + "\n";
});
console.log(graph);
}
} คุณสามารถทดสอบวิธีการเหล่านี้และชั้นเรียนของเราโดยใช้ -
ตัวอย่าง
let g = new Graph();
g.addNode("A");
g.addNode("B");
g.addNode("C");
g.addNode("D");
g.addNode("E");
g.addEdge("A", "C");
g.addEdge("A", "B");
g.addDirectedEdge("A", "D");
g.addEdge("D", "E");
g.display(); ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
A->C, B, D B->A C->A D->E E->D