C++实现邻接矩阵上的深度优先
时间: 2023-10-22 17:34:50 浏览: 95
好的,下面是C++实现邻接矩阵上的深度优先搜索(DFS)的代码。
在这个实现中,我们假设输入的无向图用邻接矩阵表示,其中graph[i][j]表示第i个节点到第j个节点是否有边相连(1表示有,0表示没有)。
```cpp
#include <iostream>
using namespace std;
void DFS(int graph[][100], int n, bool visited[], int start) {
// 标记起始节点为已访问
visited[start] = true;
cout << start << " ";
// 递归遍历与起始节点相连的未访问节点
for (int i = 0; i < n; i++) {
if (graph[start][i] == 1 && !visited[i]) {
DFS(graph, n, visited, i);
}
}
}
int main() {
int n; // 节点数
cin >> n;
// 初始化邻接矩阵
int graph[100][100];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> graph[i][j];
}
}
// 初始化visited数组
bool visited[n];
for (int i = 0; i < n; i++) {
visited[i] = false;
}
// 从第0个节点开始进行DFS
DFS(graph, n, visited, 0);
return 0;
}
```
在这个实现中,我们使用一个数组`visited`来标记每个节点是否已经被访问过。从起始节点开始进行DFS时,将其标记为已访问,并输出节点编号。然后递归遍历所有与起始节点相连的未访问节点,并将其标记为已访问。
您可以输入一个类似下面的邻接矩阵来测试这个程序:
```
5
0 1 1 0 0
1 0 1 1 0
1 1 0 1 1
0 1 1 0 1
0 0 1 1 0
```
这个邻接矩阵表示一个有5个节点的无向图,其中节点0与节点1、2相连,节点1与节点0、2、3相连,节点2与节点0、1、3、4相连,节点3与节点1、2、4相连,节点4与节点2、3相连。程序的输出应该是:
```
0 1 2 3 4
```
阅读全文