阅读量:0
深度优先搜索(DFS)是一种图搜索算法,它尽可能深入一个分支,然后回溯并探索其他分支。以下是使用C#实现DFS的代码示例:
using System; using System.Collections.Generic; 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); // 添加 w 到 v 的列表中 } // DFS 递归函数 private void DFSUtil(int v, bool[] visited) { // 标记当前节点为已访问并打印 visited[v] = true; Console.Write(v + " "); // 递归地访问所有邻接节点 List<int> list = adj[v]; foreach (var n in list) { if (!visited[n]) DFSUtil(n, visited); } } // DFS 主函数 public void DFS(int v) { // 初始化所有顶点为未访问状态 bool[] visited = new bool[V]; // 调用递归的辅助函数 DFSUtil(v, visited); } // 主函数,用于测试 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.DFS(2); } }
代码说明:
Graph 类:
V
:存储图中顶点的数量。adj
:邻接表,使用列表数组表示。
AddEdge 方法: 用于在图中添加边。
DFSUtil 方法: 递归函数,用于访问节点及其相邻节点。
DFS 方法: 初始化访问状态数组并调用递归函数开始搜索。
Main 方法: 创建图并添加边,最后调用DFS方法开始搜索。
运行结果:
这段代码将输出从顶点2开始的深度优先搜索结果。例如:
从顶点 2 开始的深度优先搜索: 2 0 1 3
这表示从顶点2开始,访问顺序为2 -> 0 -> 1 -> 3。