📅  最后修改于: 2023-12-03 15:40:45.845000             🧑  作者: Mango
深度优先搜索(DFS,Depth-First Search)是一种用于遍历或搜索树或图的算法。它从一条未被访问的路径开始追溯,直到到达最深的节点,然后返回到最近的未被访问的节点,重复此过程并返回,直到没有未被访问的路径。
深度优先搜索可以使用递归或迭代的方式来实现。下面是一个使用递归的深度优先搜索的示例:
void DFS(int v, int visited[], int graph[][MAX]){
int i;
visited[v] = 1; // 标记当前节点为已访问
printf("%d ", v); // 输出当前访问到的节点
// 递归遍历与当前节点相邻的节点
for (i = 0; i < MAX; i++){
if (graph[v][i] && !visited[i]){ // 如果两节点间有边且相邻节点未被访问
DFS(i, visited, graph); // 递归访问该节点
}
}
}
其中,v
是当前访问的节点,visited[]
是记录每个节点访问状态的数组,graph[][MAX]
是图的邻接矩阵表示。
代码中,我们首先将当前节点标记为已访问,并输出节点号。然后遍历与当前节点相邻的所有节点,如果相邻节点未被访问过,就递归访问该节点。
为了更好地理解深度优先搜索的实现方式,我们以以下的图为例:
0--------1
| |
| |
| |
2--------3
这是一个简单的4个节点的图,我们使用邻接矩阵表示如下:
// 0 1 2 3
int graph[MAX][MAX] = {
{0, 1, 1, 0},
{1, 0, 0, 1},
{1, 0, 0, 1},
{0, 1, 1, 0},
};
然后我们可以构造一个 main()
函数来演示深度优先搜索的实现:
int main() {
int i, visited[MAX] = {0}; // 初始化 visited 数组为0
printf("\nDFS遍历结果:");
DFS(0, visited, graph);
return 0;
}
在 main()
函数中,我们创建一个 visited
数组来记录每个节点的访问状态,初始化为0。然后调用 DFS()
函数来进行深度优先搜索,从节点0开始访问。
深度优先搜索是一种常用的遍历或搜索树或图的算法,可以用递归或迭代的方式实现。本文提供了使用递归实现深度优先搜索的 C 程序示例,并以一个简单的图为例演示。