深度优先搜索(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。