建立一个有向图的邻接矩阵存储,然后在主函数中输出该二维矩阵(注意输出格式要为一个矩阵),以检验存储的正确性;再从0号顶点出发对该图进行深度优先搜索,按顺序输出所访问的顶点。 【输入形式】 顶点个数 边的条数 顶点数据 边 【输出形式】 二维矩阵 顶点序列 【样例输入】 5 5 A B C D E AB AD BE EC DC C++
时间: 2023-12-18 19:03:00 浏览: 72
有向图的邻接矩阵
5星 · 资源好评率100%
以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 1005;
int n, m;
vector<int> G[MAXN]; //邻接表存储图
bool vis[MAXN]; //记录每个点是否被访问过
void dfs(int u) {
vis[u] = true;
cout << u << " ";
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!vis[v]) {
dfs(v);
}
}
}
int main() {
cin >> n >> m;
char name[MAXN];
int u, v;
for (int i = 0; i < n; i++) {
cin >> name[i];
}
for (int i = 0; i < m; i++) {
cin >> u >> v;
G[u].push_back(v);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int u = i, v = j;
bool flag = false;
for (int k = 0; k < G[u].size(); k++) {
if (G[u][k] == v) {
flag = true;
break;
}
}
if (flag) cout << "1 ";
else cout << "0 ";
}
cout << endl;
}
memset(vis, false, sizeof(vis));
dfs(0);
cout << endl;
return 0;
}
```
输入格式为:顶点个数、边的条数、每个顶点的数据、每条边的起点和终点。其中顶点数据为一个字符串数组,边为两个整数表示。
输出格式为:邻接矩阵(0表示不连通,1表示连通),深度优先搜索的顶点序列。
例如,样例输入:
```
5 5
A B C D E
0 1
0 3
1 4
4 2
3 2
```
对应的输出为:
```
0 1 0 1 0
0 0 0 0 1
0 0 0 0 1
0 0 0 0 0
0 0 1 0 0
0 3 2 4 1
```
阅读全文