C#实现深度优先搜索(Depth-First Search,DFS)算法

avatar
作者
猴君
阅读量: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);     } } 

代码说明:

  1. Graph 类:

    • V:存储图中顶点的数量。
    • adj:邻接表,使用列表数组表示。
  2. AddEdge 方法: 用于在图中添加边。

  3. DFSUtil 方法: 递归函数,用于访问节点及其相邻节点。

  4. DFS 方法: 初始化访问状态数组并调用递归函数开始搜索。

  5. Main 方法: 创建图并添加边,最后调用DFS方法开始搜索。

运行结果:

这段代码将输出从顶点2开始的深度优先搜索结果。例如:

从顶点 2 开始的深度优先搜索: 2 0 1 3

这表示从顶点2开始,访问顺序为2 -> 0 -> 1 -> 3。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!