用C语言写一个dfs算法
时间: 2023-05-14 21:04:49 浏览: 117
好的,以下是一个简单的C语言DFS算法的示例代码:
```
#include <stdio.h>
#define MAX_N 100
int n; // 图中节点的数量
int graph[MAX_N][MAX_N]; // 图的邻接矩阵
int visited[MAX_N]; // 记录节点是否被访问过
void dfs(int node) {
visited[node] = 1; // 标记节点已被访问
printf("%d ", node); // 输出节点编号
// 遍历与当前节点相邻的节点
for (int i = 0; i < n; i++) {
if (graph[node][i] && !visited[i]) {
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]);
}
}
// 从节点0开始遍历
dfs(0);
return 0;
}
```
希望这个示例代码能够帮助你理解DFS算法的实现。
相关问题
用c语言写运用dfs算法求v到j中的路径只需要dfs算法部分
好的,下面是用C语言实现DFS算法来求解从顶点v到顶点j的路径的代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
bool visited[MAX_VERTICES];
int adjacencyMatrix[MAX_VERTICES][MAX_VERTICES];
int path[MAX_VERTICES];
int pathIndex = 0;
// 深度优先搜索函数
void dfs(int v, int j, int n) {
visited[v] = true;
path[pathIndex++] = v;
if (v == j) {
// 打印路径
for (int i = 0; i < pathIndex; i++) {
printf("%d ", path[i]);
}
printf("\n");
} else {
for (int i = 0; i < n; i++) {
if (!visited[i] && adjacencyMatrix[v][i] != 0) {
dfs(i, j, n);
}
}
}
// 回溯
pathIndex--;
visited[v] = false;
}
int main() {
int n; // 顶点数量
int v, j; // 起始顶点和目标顶点
printf("请输入顶点数量:");
scanf("%d", &n);
printf("请输入邻接矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &adjacencyMatrix[i][j]);
}
}
printf("请输入起始顶点和目标顶点:");
scanf("%d %d", &v, &j);
printf("从顶点 %d 到顶点 %d 的路径为:\n", v, j);
dfs(v, j, n);
return 0;
}
```
这段代码通过邻接矩阵来表示图的连接关系,使用深度优先搜索算法来找到从顶点v到顶点j的路径。在搜索过程中,使用一个visited数组来记录已经访问过的顶点,使用path数组来保存路径,pathIndex变量表示当前路径的长度。
请注意,在实际应用中,你需要根据自己的需求进行适当的修改和扩展。
使用C语言写一个深度算法代码
以下是使用C语言写的深度优先搜索算法的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_VERTICES 100
bool visited[MAX_VERTICES];
int adj_matrix[MAX_VERTICES][MAX_VERTICES];
int num_vertices;
void dfs(int v) {
visited[v] = true;
printf("%d ", v);
for (int i = 0; i < num_vertices; i++) {
if (adj_matrix[v][i] == 1 && !visited[i]) {
dfs(i);
}
}
}
int main() {
printf("Enter the number of vertices: ");
scanf("%d", &num_vertices);
printf("Enter the adjacency matrix:\n");
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
scanf("%d", &adj_matrix[i][j]);
}
}
printf("DFS traversal: ");
for (int i = 0; i < num_vertices; i++) {
visited[i] = false;
}
for (int i = 0; i < num_vertices; i++) {
if (!visited[i]) {
dfs(i);
}
}
printf("\n");
return 0;
}
```
该代码使用了邻接矩阵表示图,并使用了递归来实现深度优先搜索。在搜索过程中,使用了一个visited数组来记录每个节点是否被访问过。通过输入邻接矩阵和起始节点,可以输出从起始节点开始的深度优先遍历结果。
阅读全文