一、算法简介
BFS是广度优先搜索(Breadth First Search)的缩写,是一种用于遍历或搜索图或树的算法。它从起始节点开始,逐层地访问其邻居节点,直到找到目标节点或遍历完整个图或树为止。
二、代码实现
在BFS算法中,通常使用队列来实现。以下是C#语言中实现BFS算法的示例代码:
using System; using System.Collections.Generic; public class Graph { private int V; // 顶点的数量 private List<int>[] adj; // 邻接表表示的图 public Graph(int v) { V = 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); } public void BFS(int s) { bool[] visited = new bool[V]; Queue<int> queue = new Queue<int>(); visited[s] = true; queue.Enqueue(s); while (queue.Count != 0) { s = queue.Dequeue(); Console.WriteLine(s + " "); foreach (int i in adj[s]) { if (!visited[i]) { visited[i] = true; queue.Enqueue(i); } } } } 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("广度优先遍历结果:"); g.BFS(2); } }
在上述示例代码中,同样定义了一个Graph类来表示图结构。通过构造函数初始化邻接表adj,并提供AddEdge方法用于添加有向边。
然后,在BFS方法中,使用一个visited数组来跟踪已经访问过的节点,并使用一个队列来辅助进行广度优先搜索。首先将起始节点s标记为已访问并加入队列中。
然后,使用while循环从队列中取出一个节点s,并输出它的值。接下来,遍历节点s的所有邻居节点,并将未访问过的邻居节点加入队列中,并标记为已访问。
最后,在Main方法中创建一个Graph对象,添加有向边,并调用BFS方法进行广度优先遍历。
最后
祝您好运!