用void Create(ALGraph &G) /******************begin **********/ 建立无向图的邻接表代码
时间: 2024-05-28 19:06:44 浏览: 168
ALGRAPH:Dijkstra算法在图形上的可视化
5星 · 资源好评率100%
这段代码的作用是用邻接表的形式创建一个无向图。邻接表是一种常见的图存储结构,它通过链表来存储每个节点的邻居节点信息,方便快速地查找节点的关系。
下面是一个示例代码实现:
```
#include <iostream>
#define MAX_VERTEX_NUM 100 // 最大顶点数
using namespace std;
// 定义边表结构体
typedef struct ArcNode {
int adjvex; // 邻接点在数组中的位置下标
struct ArcNode* nextarc; // 指向下一个邻接点的指针
}ArcNode;
// 定义顶点表结构体
typedef struct VNode {
int data; // 顶点信息
ArcNode* firstarc; // 指向第一个邻接点的指针
}VNode, AdjList[MAX_VERTEX_NUM];
// 定义图结构体
typedef struct {
AdjList vertices; // 邻接表
int vexnum, arcnum; // 顶点数和边数
}ALGraph;
// 初始化边表
void InitArcNode(ArcNode* &p, int adjvex) {
p = new ArcNode;
p->adjvex = adjvex;
p->nextarc = NULL;
}
// 创建无向图
void Create(ALGraph &G) {
cout << "请输入无向图的顶点数和边数:" << endl;
cin >> G.vexnum >> G.arcnum;
cout << "请输入无向图各顶点信息:" << endl;
for (int i = 0; i < G.vexnum; i++) {
cin >> G.vertices[i].data;
G.vertices[i].firstarc = NULL;
}
cout << "请输入无向图各边的信息(起点 终点):" << endl;
for (int k = 0; k < G.arcnum; k++) {
int i, j;
cin >> i >> j;
// 初始化边表
ArcNode* p, * q;
InitArcNode(p, j);
p->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc = p;
InitArcNode(q, i);
q->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = q;
}
}
int main() {
ALGraph G;
Create(G);
return 0;
}
```
阅读全文