广度优先搜索(Breadth-First Search,BFS)是一种遍历或搜索树或图的算法。以下是使用C#实现广度优先搜索的示例:
using System;
using System.Collections.Generic;
class Graph
{
private int vertices; // 顶点数量
private List<int>[] adj; // 邻接表
// 构造函数
public Graph(int v)
{
vertices = v;
adj = new List<int>[v];
for (int i = 0; i < v; ++i)
adj[i] = new List<int>();
}
// 添加边
public void AddEdge(int v, int w)
{
adj[v].Add(w);
}
// BFS算法
public void BFS(int start)
{
// 标记所有顶点为未访问
bool[] visited = new bool[vertices];
// 创建一个队列用于BFS
Queue<int> queue = new Queue<int>();
// 标记起始节点为已访问并入队
visited[start] = true;
queue.Enqueue(start);
while (queue.Count != 0)
{
// 从队列中取出一个节点
start = queue.Dequeue();
Console.Write(start + " ");
// 获取该节点的所有邻接节点
foreach (int next in adj[start])
{
if (!visited[next])
{
visited[next] = true;
queue.Enqueue(next);
}
}
}
}
public static void Main(string[] args)
{
Graph g = new Graph(4);
g.AddEdge(0, 1);
g.AddEdge(0, 2);
g.AddEdge(1, 2);
g.AddEdge(2, 0);
g.AddEdge(2, 3);
g.AddEdge(3, 3);
Console.WriteLine("从顶点 2 开始进行广度优先搜索:");
g.BFS(2);
}
}
在这个示例中:
Graph
类表示一个图,使用邻接表表示边。AddEdge
方法用于向图中添加边。BFS
方法实现广度优先搜索算法,打印出从起始节点开始的遍历顺序。- 在
Main
方法中,创建一个包含 4 个顶点的图,并添加了一些边。然后从顶点 2 开始执行 BFS 算法,输出遍历顺序。
你可以根据需要调整图的结构和起始节点,以测试不同的图和起始点。