建立一个无向图 用邻接表
时间: 2023-11-27 19:27:28 浏览: 81
好的,我可以帮你建立一个无向图的邻接表。
假设我们要建立如下图所示的无向图:
```
1 -- 2 -- 3
| | |
4 -- 5 -- 6
```
那么对应的邻接表如下:
```
1 -> 2 -> 4
2 -> 1 -> 3 -> 5
3 -> 2 -> 6
4 -> 1 -> 5
5 -> 2 -> 4 -> 6
6 -> 3 -> 5
```
其中,每个节点对应一个链表,链表中存储与该节点直接相连的节点的编号。例如,节点 1 的链表中存储 2 和 4,表示节点 1 与节点 2 和节点 4 相连。
希望这个例子可以帮助你更好地理解邻接表的概念。
相关问题
建立一个无向图用邻接表
建立无向图的邻接表,可以使用以下结构体来表示图:
```
#define MAX_VERTEX_NUM 20
typedef struct ArcNode { // 边表结点
int adjvex; // 邻接点在顶点数组中的下标
struct ArcNode *nextarc; // 指向下一个邻接点的指针
} ArcNode;
typedef struct VNode { // 顶点信息
char data; // 顶点数据
ArcNode *firstarc; // 指向第一个邻接点的指针
} VNode;
typedef struct { // 图
VNode adjlist[MAX_VERTEX_NUM]; // 顶点数组
int vexnum, arcnum; // 顶点数和边数
} Graph;
```
其中,每个顶点通过VNode结构体来表示,它包含了该顶点的数据和一个指向第一个邻接点的指针。每条边则通过ArcNode结构体来表示,它包含了邻接点在顶点数组中的下标和指向下一个邻接点的指针。
以下是建立无向图的邻接表的函数实现:
```
void CreateGraph(Graph &G) {
int i, j, k;
char v1, v2;
ArcNode *p;
scanf("%d%d", &G.vexnum, &G.arcnum);
getchar();
for (i = 0; i < G.vexnum; i++) {
scanf("%c", &G.adjlist[i].data);
G.adjlist[i].firstarc = NULL;
getchar();
}
for (k = 0; k < G.arcnum; k++) {
scanf("%c%c", &v1, &v2);
getchar();
i = LocateVex(G, v1);
j = LocateVex(G, v2);
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextarc = G.adjlist[i].firstarc;
G.adjlist[i].firstarc = p;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = i;
p->nextarc = G.adjlist[j].firstarc;
G.adjlist[j].firstarc = p;
}
}
```
该函数首先读取输入的顶点数和边数,然后循环读取每个顶点的名称,并将其初始化为一个没有邻接点的顶点。接下来,循环读取每条边的起点和终点,通过LocateVex函数定位它们在顶点数组中的下标,然后创建两个ArcNode结构体,分别连接起点和终点的邻接表。需要注意的是,由于是无向图,所以需要在起点和终点的邻接表中都添加一条边。
其中,LocateVex函数可以通过遍历顶点数组来查找指定顶点的下标:
```
int LocateVex(Graph G, char v) {
int i;
for (i = 0; i < G.vexnum; i++) {
if (G.adjlist[i].data == v) {
return i;
}
}
return -1;
}
```
该函数接受一个图结构体和一个顶点的名称作为参数,返回该顶点在顶点数组中的下标。如果未找到该顶点,则返回-1。
建立一个无向图的邻接表,并输出该图的邻接表
好的,我理解了你的问题。下面是一个无向图的邻接表的建立过程:
假设这个无向图有 $n$ 个顶点 $v_1, v_2, ..., v_n$ 和 $m$ 条边 $e_1, e_2, ..., e_m$,现在我们要建立该图的邻接表。
1. 创建一个长度为 $n$ 的数组,数组的每个元素代表一个顶点,每个元素初始化为空列表(因为可能存在顶点没有任何边与之相连)。
2. 对于每条边 $e_i = (u, v)$,将顶点 $u$ 加入顶点 $v$ 的邻接表中,将顶点 $v$ 加入顶点 $u$ 的邻接表中。
下面是一个示例图的邻接表:
```
图示例:
1
/ \
2---3
| |
4---5
邻接表:
v1: v2, v3
v2: v1, v3, v4
v3: v1, v2, v4, v5
v4: v2, v3, v5
v5: v3, v4
```
希望这个回答能够帮助到你!
阅读全文