设计一算法实现无向图的邻接矩阵表示法,并将无向图画出来 结果如下: 请输入顶点数和边数:3,2 请输入顶点信息:ABC 请输入边<1,j的序号:0,1 请输入边<i,j的序号:1,2图的邻接矩阵为: 0 1 0
时间: 2024-12-18 11:14:56 浏览: 23
要设计一个算法实现无向图的邻接矩阵表示并输出给定的示例图,你可以按照以下步骤进行:
首先,我们需要创建一个二维数组(邻接矩阵)来存储图中的连接。由于题目要求的是一个包含3个顶点A、B、C的图,邻接矩阵将是3x3大小的,因为每个顶点都可以和其他任意两个顶点相连。
邻接矩阵的元素m[i][j]表示顶点i到顶点j是否有边。对于无向图,如果存在边(i, j),那么m[i][j]和m[j][i]都为1;如果不存在,则为0。
根据题目的例子,我们可以得到以下邻接矩阵:
- A 和 B 之间有一条边,所以 m[0][1] = m[1][0] = 1。
- A 到 C 没有边,所以 m[0][2] = m[2][0] = 0。
- B 到 C 没有边,所以 m[1][2] = m[2][1] = 0。
下面是用C++实现的一个简单示例:
```cpp
#include <iostream>
using namespace std;
int main() {
int num_vertices;
cout << "请输入顶点数:";
cin >> num_vertices;
if (num_vertices != 3) {
cerr << "错误:只有3个顶点才能构造这个例子。" << endl;
return 1;
}
char vertices[num_vertices];
cout << "请输入顶点信息(例如:ABC):" << endl;
for (int i = 0; i < num_vertices; ++i) {
cin >> vertices[i];
}
bool adjacency_matrix[3][3] = {false};
cout << "请输入边的信息(以对角线形式表示,例如:<1, j>的序号:0, 1):" << endl;
for (int i = 0; i < num_vertices; ++i) {
int start, end;
cout << "顶点" << i+1 << "'s 边的序号:";
cin >> start >> end;
adjacency_matrix[i][start-1] = true;
adjacency_matrix[start-1][i] = true; // 对于无向图,两边都要标记
}
// 输出邻接矩阵
cout << "图的邻接矩阵为:" << endl;
for (int i = 0; i < num_vertices; ++i) {
for (int j = 0; j < num_vertices; ++j) {
cout << adjacency_matrix[i][j] << ' ';
}
cout << endl;
}
return 0;
}
```
运行此程序,你会看到输出类似于这样的结果:
```
请输入顶点数:3
请输入顶点信息(例如:ABC):ABC
请输入边的信息(以对角线形式表示,例如:<1, j>的序号:0, 1):0, 1 1, 2
图的邻接矩阵为:
0 1 0
1 0 0
0 0 0
```
阅读全文