图的邻接表创建和输出 实验要求: 要建立的是有向图(1)还是无向图(0),请选择(输入1或0):1 =======将建立一个无向图======= 请输入图的顶点数:8 请输入图的边数:9 请输入图的各顶点信息: 第1个顶点信息:A 第2个顶点信息:B 第3个顶点信息:C 第4个顶点信息:D 第5个顶点信息:E 第6个顶点信息:F 第7个顶点信息:G 第8个顶点信息:H 请输入边的信息,格式为:序号1,序号2(序号依次为0、1、2……): 请输入第0条边:0,1 请输入第2条边:0,2 请输入第3条边:1,3 请输入第4条边:1,4 请输入第5条边:2,5 请输入第6条边:2,6 请输入第7条边:3,7 请输入第8条边:4,7 请输入第9条边:5,6 图的邻接表表示如下: 0 [A][2] [1] 1 [B][4] [3] [0] 2 [C][6] [5] [0] 3 [D][7] [1] 4 [E][7] [1] 5 [F][6] [2] 6 [G][5] [2] 7 [H][4] [3]
时间: 2023-12-07 19:02:55 浏览: 123
以下是邻接表创建和输出的C++代码:
```
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 100;
struct Edge {
int to; // 边的终点
int next; // 下一条边的编号
};
int head[MAXN]; // 邻接表头
Edge edges[MAXN * 2]; // 边列表
int edgeCount = 0; // 边的数量
void addEdge(int from, int to) {
edges[edgeCount].to = to;
edges[edgeCount].next = head[from];
head[from] = edgeCount++;
}
void printGraph(int n) {
for (int i = 0; i < n; i++) {
cout << i << "\t[";
int p = head[i];
while (p != -1) {
cout << (char)('A' + edges[p].to) << "] -> [";
p = edges[p].next;
}
cout << "NULL]\n";
}
}
int main() {
memset(head, -1, sizeof(head)); // 初始化邻接表头为-1
int n, m, u, v;
cout << "要建立的是有向图(1)还是无向图(0),请选择(输入1或0):";
cin >> m;
cout << "请输入图的顶点数:";
cin >> n;
cout << "请输入图的边数:";
cin >> m;
cout << "请输入图的各顶点信息:\n";
for (int i = 0; i < n; i++) {
char ch;
cout << "第" << i + 1 << "个顶点信息:";
cin >> ch;
}
cout << "请输入边的信息,格式为:序号1,序号2(序号依次为0、1、2……):\n";
for (int i = 0; i < m; i++) {
cout << "请输入第" << i << "条边:";
cin >> u >> v;
addEdge(u, v);
if (m == 0) {
addEdge(v, u);
}
}
cout << "图的邻接表表示如下:\n";
printGraph(n);
return 0;
}
```
代码中使用邻接表来存储图,addEdge函数用于向邻接表中添加一条边,printGraph函数用于输出邻接表。在主函数中,先依次输入图的顶点数、边数和各个顶点的信息,再输入边的信息,最后输出邻接表。
阅读全文