JS のいくつかの一般的なグラフ アルゴリズム

以下に、一般的なグラフ アルゴリズムの JavaScript の例を示します。

1. 幅優先検索 (幅優先検索、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. 深さ優先検索 (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. 最短経路アルゴリズム (ダイクストラのアルゴリズムなど):

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