深度优先算法 c++
时间: 2023-11-18 12:42:28 浏览: 102
八数码的深度优先算法c++实现
深度优先算法(Depth First Search,DFS)是一种用于遍历或搜索树或图的算法。在深度优先算法中,我们首先访问一个节点,然后递归地访问它的邻居节点,直到到达没有未访问邻居的节点,然后返回并继续访问其他未访问的节点。
以下是一个使用深度优先算法遍历图的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_NODES 100
bool visited[MAX_NODES]; // 记录节点是否已访问
int adjacencyMatrix[MAX_NODES][MAX_NODES]; // 图的邻接矩阵
void dfs(int node, int numNodes) {
visited[node] = true;
printf("访问节点 %d\n", node);
for (int i = 0; i < numNodes; i++) {
if (adjacencyMatrix[node][i] == 1 && !visited[i]) {
dfs(i, numNodes);
}
}
}
int main() {
int numNodes;
printf("请输入节点数量:");
scanf("%d", &numNodes);
printf("请输入邻接矩阵:\n");
for (int i = 0; i < numNodes; i++) {
for (int j = 0; j < numNodes; j++) {
scanf("%d", &adjacencyMatrix[i][j]);
}
}
// 初始化visited数组
for (int i = 0; i < numNodes; i++) {
visited[i] = false;
}
printf("深度优先遍历结果:\n");
for (int i = 0; i < numNodes; i++) {
if (!visited[i]) {
dfs(i, numNodes);
}
}
return 0;
}
```
在这个示例中,我们首先输入节点的数量和邻接矩阵,然后使用深度优先算法进行遍历,并输出访问的节点顺序。
注意:此示例代码假设输入的图是连通的(即所有节点都是可达的)。如果图是不连通的,需要对每个未访问的节点再执行一次深度优先遍历。
阅读全文