c语言编写程序实现深度优先搜索算法
时间: 2024-10-07 13:07:48 浏览: 29
深度优先搜索算法是一种常见的图搜索算法,常用于解决连通图的遍历和路径搜索问题。下面是使用C语言编写程序实现深度优先搜索算法的基本思路:
1. 定义图的数据结构:通常使用邻接矩阵或邻接表来表示图的结构。邻接矩阵是一个二维数组,表示图中节点之间的关系;邻接表则是一组链表,每个节点对应一个链表,链表中存储与该节点相邻的节点信息。
2. 初始化图的数据结构:对于邻接矩阵,需要将数组中所有元素初始化为0或者无穷大,表示两个节点之间没有边;对于邻接表,需要创建一个空链表来存储所有节点信息。
3. 实现深度优先搜索算法:从起始节点开始,依次遍历与之相邻的节点,如果该节点未被访问过,则递归调用深度优先搜索算法,直到所有节点都被访问过。
下面是一个简单的C语言程序实现深度优先搜索算法的示例:
```
#include<stdio.h>
#define MAXSIZE 100
int visited[MAXSIZE]; // 标记节点是否被访问过
int graph[MAXSIZE][MAXSIZE]; // 存储图的邻接矩阵
int n; // 节点数
void DFS(int node) { // 深度优先搜索算法
visited[node] = 1; // 标记节点已被访问
printf("%d ", node); // 输出当前访问的节点
for (int i = 0; i < n; i++) {
if (graph[node][i] == 1 && visited[i] == 0) { // 如果节点未被访问且与当前节点相邻
DFS(i); // 递归调用深度优先搜索算法
}
}
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
for (int i = 0; i < n; i++) {
visited[i] = 0;
}
DFS(0); // 从第一个节点开始遍历
return 0;
}
```
阅读全文