用c语言编写程序实现深度优先搜素算法和广度优先算法
时间: 2023-11-10 21:14:18 浏览: 89
深度优先、广度优先搜索算法C语言版
以下是C语言实现深度优先搜索算法和广度优先搜索算法的示例代码:
深度优先搜索算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 50
int visited[MAX_SIZE]; //标记节点是否被访问
int matrix[MAX_SIZE][MAX_SIZE]; //图的邻接矩阵
int vertex_num, edge_num; //节点数和边数
void dfs(int v) {
visited[v] = 1; //标记为已访问
printf("%d ", v);
for(int i = 0; i < vertex_num; i++) {
if(matrix[v][i] == 1 && visited[i] == 0) { //如果与v相连的节点i未被访问,则递归访问i
dfs(i);
}
}
}
int main() {
scanf("%d%d", &vertex_num, &edge_num);
//读入图的邻接矩阵
for(int i = 0; i < edge_num; i++) {
int v1, v2;
scanf("%d%d", &v1, &v2);
matrix[v1][v2] = 1;
matrix[v2][v1] = 1;
}
//从节点0开始深度优先搜索
dfs(0);
return 0;
}
```
广度优先搜索算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 50
int visited[MAX_SIZE]; //标记节点是否被访问
int matrix[MAX_SIZE][MAX_SIZE]; //图的邻接矩阵
int vertex_num, edge_num; //节点数和边数
void bfs(int v) {
int queue[MAX_SIZE]; //用数组模拟队列
int front = 0, rear = 0; //队列的前后指针
visited[v] = 1; //标记为已访问
printf("%d ", v);
queue[rear++] = v; //入队
while(front != rear) { //队列不为空
int cur = queue[front++]; //出队
for(int i = 0; i < vertex_num; i++) {
if(matrix[cur][i] == 1 && visited[i] == 0) { //如果与cur相连的节点i未被访问,则访问i并入队
visited[i] = 1;
printf("%d ", i);
queue[rear++] = i;
}
}
}
}
int main() {
scanf("%d%d", &vertex_num, &edge_num);
//读入图的邻接矩阵
for(int i = 0; i < edge_num; i++) {
int v1, v2;
scanf("%d%d", &v1, &v2);
matrix[v1][v2] = 1;
matrix[v2][v1] = 1;
}
//从节点0开始广度优先搜索
bfs(0);
return 0;
}
```
阅读全文