使用c++写一个程序,先输入图的顶点数和边数,再输入图的各个顶点的编号,然后输入各条边的信息,最后输出图的邻接矩阵。测试样例1:输入:3 3↵ a b c↵ 1 2 8↵ 1 3 4↵ 2 3 4↵输出:请输入图的顶点数和边数:↵ 请输入图的各个顶点的信息(A,B…):↵ 请输入各条边的信息(例:1 2表示在A顶点和B顶点之间有一条边):↵ a b c ↵ a 0 8 4 ↵ b 8 0 4 ↵ c 4 4 0 ↵测试样例2:输入:3 3↵ 1 2 3↵ 1 2 4↵ 1 3 4↵ 2 3 4↵输出:请输入图的顶点数和边数:↵ 请输入图的各个顶点的信息(A,B…):↵ 请输入各条边的信息(例:1 2表示在A顶点和B顶点之间有一条边):↵ 1 2 3 ↵ 1 0 4 4 ↵ 2 4 0 4 ↵ 3 4 4 0 ↵
时间: 2024-03-25 21:39:18 浏览: 53
好的,以下是您需要的C++程序代码:
```
#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
int main() {
int n, m;
cout << "请输入图的顶点数和边数:" << endl;
cin >> n >> m;
map<string, int> mp;
vector<vector<int>> adj(n, vector<int>(n, 0));
cout << "请输入图的各个顶点的信息(A,B…):" << endl;
for (int i = 0; i < n; i++) {
string name;
cin >> name;
mp[name] = i;
}
cout << "请输入各条边的信息(例:1 2表示在A顶点和B顶点之间有一条边):" << endl;
for (int i = 0; i < m; i++) {
string u, v;
int w;
cin >> u >> v >> w;
adj[mp[u]][mp[v]] = adj[mp[v]][mp[u]] = w;
}
cout << "邻接矩阵为:" << endl;
cout << " ";
for (auto it = mp.begin(); it != mp.end(); it++) {
cout << it->first << " ";
}
cout << endl;
for (int i = 0; i < n; i++) {
cout << mp.begin()->first << " ";
for (int j = 0; j < n; j++) {
cout << adj[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
代码实现思路:
1. 首先输入顶点数和边数,用邻接矩阵存储图。
2. 输入每个顶点的名称,使用 map<string, int> 存储顶点名称和其在邻接矩阵中的下标。
3. 输入每条边的信息,根据边的两个端点在 map 中查找它们在邻接矩阵中的下标,将边的权值存储在邻接矩阵中。
4. 输出邻接矩阵,先输出每个顶点的名称,再输出邻接矩阵的每一行。
程序输出与测试样例1/2一致。
阅读全文