使用c++写一个程序,先输入图的顶点数和边数,再输入图的各个顶点的编号,然后输入各条边的信息,最后输出图的邻接矩阵。例如:输入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 ↵
时间: 2024-03-25 08:39:12 浏览: 101
c++写的程序
好的,这是一个比较基础的图论问题,以下是C++代码实现:
```c++
#include <iostream>
#include <map>
using namespace std;
const int maxn = 100; // 最大顶点数
int G[maxn][maxn]; // 邻接矩阵
map<char, int> mp; // 字符映射为数字编号
int main()
{
int n, m;
cout << "请输入图的顶点数和边数:";
cin >> n >> m;
// 输入顶点信息,并建立字符到数字的映射
cout << "请输入图的各个顶点的信息:";
for (int i = 0; i < n; i++) {
char c;
cin >> c;
mp[c] = i;
}
// 初始化邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
G[i][j] = i == j ? 0 : INT_MAX;
}
}
// 输入边的信息,更新邻接矩阵
cout << "请输入各条边的信息(例:1 2表示在A顶点和B顶点之间有一条边):" << endl;
for (int i = 0; i < m; i++) {
char c1, c2;
int w;
cin >> c1 >> c2 >> w;
int u = mp[c1], v = mp[c2];
G[u][v] = G[v][u] = w;
}
// 输出邻接矩阵
cout << " ";
for (int i = 0; i < n; i++) {
cout << char(i + 'a') << " ";
}
cout << endl;
for (int i = 0; i < n; i++) {
cout << char(i + 'a') << " ";
for (int j = 0; j < n; j++) {
if (G[i][j] == INT_MAX) {
cout << "INF ";
} else {
cout << G[i][j] << " ";
}
}
cout << endl;
}
return 0;
}
```
运行示例:
```
请输入图的顶点数和边数:3 3
请输入图的各个顶点的信息:a b c
请输入各条边的信息(例:1 2表示在A顶点和B顶点之间有一条边):
a b 8
a c 4
b c 4
a b c
a 0 8 4
b 8 0 4
c 4 4 0
```
阅读全文