📜  Graph 在 JavaScript 中的实现(1)

📅  最后修改于: 2023-12-03 14:41:37.826000             🧑  作者: Mango

Graph 在 JavaScript 中的实现

在计算机科学中,图是由节点(顶点)和边组成的一种数据结构。图可以用来表示实际问题中的关系和连接性。在 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 中实现图的两种常见方法:邻接矩阵和邻接表。你可以根据需要选择适合的方法来构建和操作图。希望这篇介绍对你有所帮助!