JS 几种常见的图算法

下面是一些常见的图算法的 JavaScript 示例:

1. 广度优先搜索(Breadth First Search, BFS):

function BFS(graph, start) {
  const visited = new Set();
  const queue = [start];

  while (queue.length > 0) {
    const vertex = queue.shift();
    visited.add(vertex);
    console.log(vertex);
    const neighbors = graph[vertex];
    for (const neighbor of neighbors) {
      if (!visited.has(neighbor)) {
        queue.push(neighbor);
      }
    }
  }
}

const graph = {
  A: ['B', 'C'],
  B: ['A', 'D'],
  C: ['A', 'E'],
  D: ['B', 'E'],
  E: ['C', 'D']
};

BFS(graph, 'A');

2. 深度优先搜索(Depth First Search, DFS):

function DFS(graph, start) {
  const visited = new Set();

  function dfsHelper(vertex) {
    visited.add(vertex);
    console.log(vertex);
    const neighbors = graph[vertex];
    for (const neighbor of neighbors) {
      if (!visited.has(neighbor)) {
        dfsHelper(neighbor);
      }
    }
  }

  dfsHelper(start);
}

const graph = {
  A: ['B', 'C'],
  B: ['A', 'D'],
  C: ['A', 'E'],
  D: ['B', 'E'],
  E: ['C', 'D']
};

DFS(graph, 'A');

3. 最短路径算法(例如 Dijkstra 算法):

function Dijkstra(graph, start) {
  const distances = {};
  const visited = new Set();
  const queue = new PriorityQueue();

  for (const vertex in graph) {
    distances[vertex] = vertex === start ? 0 : Infinity;
    queue.enqueue(vertex, distances[vertex]);
  }

  while (!queue.isEmpty()) {
    const { element: vertex } = queue.dequeue();
    if (visited.has(vertex)) {
      continue;
    }
    visited.add(vertex);
    const neighbors = graph[vertex];
    for (const neighbor in neighbors) {
      const distance = distances[vertex] + neighbors[neighbor];
      if (distance < distances[neighbor]) {
        distances[neighbor] = distance;
        queue.updatePriority(neighbor, distance);
      }
    }
  }

  return distances;
}

const graph = {
  A: { B: 5, C: 2 },
  B: { A: 5, C: 1, D: 3 },
  C: { A: 2, B: 1, D: 2 },
  D: { B: 3, C: 2 }
};

console.log(Dijkstra(graph, 'A'));

这些是一些常见的图算法的 JavaScript 示例。图算法在解决网络连接、路径搜索、最短路径等问题上非常有用。

希望对你有帮助!如果还有其他问题,请随时提问。
 

猜你喜欢

转载自blog.csdn.net/weixin_39273589/article/details/132538964
今日推荐