📅  最后修改于: 2023-12-03 14:41:37.826000             🧑  作者: Mango
在计算机科学中,图是由节点(顶点)和边组成的一种数据结构。图可以用来表示实际问题中的关系和连接性。在 JavaScript 中,我们可以用不同的方法来实现图。
邻接矩阵是实现图的一种常见方式。它使用一个二维数组来表示节点之间的连接关系。其中,矩阵的行标和列标表示图的节点,矩阵中的值表示节点之间的连接状态。
class Graph {
constructor(numVertices) {
this.numVertices = numVertices;
this.matrix = Array(numVertices)
.fill(null)
.map(() => Array(numVertices).fill(0));
}
addEdge(source, destination) {
this.matrix[source][destination] = 1;
this.matrix[destination][source] = 1;
}
// 其他方法...
}
另一种常见的图的实现方式是邻接表。邻接表使用一个字典(或哈希映射)来表示图的节点和它们的邻居节点。每个节点对应一个数组,数组中存储与该节点相连的节点。
class Graph {
constructor() {
this.adjList = new Map();
}
addVertex(vertex) {
this.adjList.set(vertex, []);
}
addEdge(source, destination) {
this.adjList.get(source).push(destination);
this.adjList.get(destination).push(source);
}
// 其他方法...
}
以下是一些常见的图操作方法的实现:
获取图中的节点数量:
getNumVertices() {
return this.numVertices;
}
获取图中的边数量:
getNumEdges() {
let count = 0;
for (let i = 0; i < this.numVertices; i++) {
for (let j = i + 1; j < this.numVertices; j++) {
if (this.matrix[i][j] === 1) {
count++;
}
}
}
return count;
}
获取图中所有的节点:
getVertices() {
const vertices = [];
for (let i = 0; i < this.numVertices; i++) {
vertices.push(i);
}
return vertices;
}
获取节点的邻居节点:
getNeighbors(vertex) {
return this.adjList.get(vertex);
}
这些方法只是示例,你可以根据需要进行扩展。
以下是一个使用邻接列表实现图的示例:
const graph = new Graph();
graph.addVertex(0);
graph.addVertex(1);
graph.addVertex(2);
graph.addVertex(3);
graph.addEdge(0, 1);
graph.addEdge(1, 2);
graph.addEdge(2, 3);
graph.addEdge(3, 0);
console.log(graph.getVertices()); // [0, 1, 2, 3]
console.log(graph.getNumVertices()); // 4
console.log(graph.getNumEdges()); // 4
console.log(graph.getNeighbors(2)); // [1, 3]
以上介绍了 JavaScript 中实现图的两种常见方法:邻接矩阵和邻接表。你可以根据需要选择适合的方法来构建和操作图。希望这篇介绍对你有所帮助!