JavaでBFSアルゴリズムを使用した問題の解決方法


  1. グラフの表現: まず、問題をグラフとして表現する必要があります。これは、頂点と頂点間のエッジで構成されるデータ構造です。グラフを表現するためには、隣接リストや隣接行列などの方法を使用できます。

  2. 幅優先探索の実装: BFSアルゴリズムを実装するためには、キューと訪問済みのノードを追跡するためのセットが必要です。以下に、JavaでBFSアルゴリズムを実現するサンプルコードを示します。

import java.util.*;
public class BFSExample {
    public void bfs(Graph graph, int startNode) {
        Queue<Integer> queue = new LinkedList<>();
        Set<Integer> visited = new HashSet<>();
        // スタートノードをキューに追加して、訪問済みとマークする
        queue.add(startNode);
        visited.add(startNode);
        while (!queue.isEmpty()) {
            int currentNode = queue.poll();
            System.out.println("Visiting node: " + currentNode);
            List<Integer> neighbors = graph.getNeighbors(currentNode);
            for (int neighbor : neighbors) {
                if (!visited.contains(neighbor)) {
                    queue.add(neighbor);
                    visited.add(neighbor);
                }
            }
        }
    }
}
  1. グラフの作成とBFSの呼び出し: 上記の例では、Graphクラスがグラフを表現しており、getNeighborsメソッドは指定されたノードの隣接ノードを返すものとします。以下に、グラフの作成とBFSの呼び出しの例を示します。
public class Main {
    public static void main(String[] args) {
        // グラフの作成
        Graph graph = new Graph();
        graph.addEdge(1, 2);
        graph.addEdge(1, 3);
        graph.addEdge(2, 4);
        graph.addEdge(2, 5);
        graph.addEdge(3, 6);
        graph.addEdge(3, 7);
        // BFSの呼び出し
        BFSExample bfsExample = new BFSExample();
        bfsExample.bfs(graph, 1);
    }
}

上記の例では、ノード1から始めて、幅優先探索を行っています。キューからノードを取り出し、そのノードの隣接ノードをキューに追加することで、グラフ内を幅優先で探索します。