-
グラフの表現: まず、問題をグラフとして表現する必要があります。これは、頂点と頂点間のエッジで構成されるデータ構造です。グラフを表現するためには、隣接リストや隣接行列などの方法を使用できます。
-
幅優先探索の実装: 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);
}
}
}
}
}
- グラフの作成と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から始めて、幅優先探索を行っています。キューからノードを取り出し、そのノードの隣接ノードをキューに追加することで、グラフ内を幅優先で探索します。