memset(b,0,sizeeof(b));什么意思
时间: 2024-05-03 21:21:32 浏览: 33
以下是使用C语言写的利用栈实现深度优先搜索的代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int graph[MAX][MAX]; // 定义邻接矩阵
int visited[MAX]; // 定义访问标记数组
int stack[MAX]; // 定义栈
int top = -1; // 栈顶指针初始化为-1
void DFS(int start, int n) {
int i, j, node;
visited[start] = 1; // 标记起点已访问
stack[++top] = start; // 起点入栈
while (top >= 0) { // 当栈不为空时
node = stack[top--]; // 栈顶元素出栈
printf("%d ", node); // 输出访问的节点
for (i = n - 1; i >= 0; i--) {
if (graph[node][i] != 0 && visited[i] == 0) { // 若节点i与node有边且未被访问
visited[i] = 1; // 标记节点i已访问
stack[++top] = i; // 将节点i入栈
}
}
}
}
int main() {
int i, j, n, start;
printf("请输入节点个数:");
scanf("%d", &n);
printf("请输入邻接矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
printf("请输入起点:");
scanf("%d", &start);
printf("DFS遍历结果如下:\n");
DFS(start, n);
return 0;
}
```
以上代码中,我们使用邻接矩阵存储图,使用访问标记数组记录每个节点是否被访问过,使用栈实现深度优先搜索。在DFS函数中,我们从起点开始遍历,将起点入栈并标记为已访问,然后循环执行以下操作:弹出栈顶元素,输出该节点,查找与该节点相邻且未被访问的节点,将这些节点入栈并标记为已访问。当栈为空时,搜索结束。最后,我们在主函数中读入图的信息和起点,调用DFS函数进行遍历并输出结果。