建立一个有向图的邻接矩阵存储,然后在主函数中输出该二维矩阵(注意输出格式要为一个矩阵),以检验存储的正确性;再从0号顶点出发对该图进行深度优先搜索,按顺序输出所访问的顶点 C++
时间: 2024-01-21 21:16:19 浏览: 95
以下是一个建立有向图邻接矩阵存储并进行深度优先搜索的示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
const int MAX_N = 5; // 顶点个数
int graph[MAX_N][MAX_N] = {0}; // 邻接矩阵存储
void addEdge(int u, int v) {
graph[u][v] = 1; // 添加一条从 u 指向 v 的边
}
void printGraph() {
for (int i = 0; i < MAX_N; i++) {
for (int j = 0; j < MAX_N; j++) {
cout << graph[i][j] << " "; // 输出邻接矩阵
}
cout << endl;
}
}
void dfs(int start) {
stack<int> s;
bool visited[MAX_N] = {false}; // 记录每个顶点是否被访问过
s.push(start);
visited[start] = true;
cout << start << " "; // 输出起点
while (!s.empty()) {
int cur = s.top();
bool found = false;
for (int i = 0; i < MAX_N; i++) {
if (graph[cur][i] == 1 && !visited[i]) {
s.push(i);
visited[i] = true;
cout << i << " "; // 输出访问的顶点
found = true;
break;
}
}
if (!found) {
s.pop();
}
}
}
int main() {
addEdge(0, 1);
addEdge(0, 2);
addEdge(1, 2);
addEdge(2, 0);
addEdge(2, 3);
addEdge(3, 3);
printGraph();
dfs(0);
return 0;
}
```
输出结果为:
```
0 1 1 0 0
0 0 1 0 0
1 0 0 1 0
0 0 0 1 0
0 0 0 0 0
0 1 2 3
```
其中最后一行是深度优先搜索后访问的顶点的顺序。
阅读全文