c语言采用邻接表表示法,创建无向图G
时间: 2023-06-25 15:05:12 浏览: 99
创建无向图G的邻接表,需要先定义一个结构体来表示每个节点,同时定义一个链表来存储每个节点的邻接节点。
```
// 定义节点结构体
typedef struct Node {
int val; // 节点值
struct Edge *next; // 节点的第一个邻接节点
} Node;
// 定义邻接节点结构体
typedef struct Edge {
int to; // 邻接节点的值
struct Edge *next; // 下一个邻接节点
} Edge;
```
然后,我们可以创建一个包含所有节点的数组,并将每个节点的邻接节点添加到对应的链表中。下面是示例代码:
```
#define MAXN 100 // 最大节点数
// 创建无向图G的邻接表
void createGraph(Node *G, int n) {
// 初始化所有节点
for (int i = 0; i < n; i++) {
G[i].val = i;
G[i].next = NULL;
}
// 添加边
int x, y;
while (scanf("%d %d", &x, &y) == 2) {
// 添加从x到y的边
Edge *p = (Edge*)malloc(sizeof(Edge));
p->to = y;
p->next = G[x].next;
G[x].next = p;
// 添加从y到x的边
Edge *q = (Edge*)malloc(sizeof(Edge));
q->to = x;
q->next = G[y].next;
G[y].next = q;
}
}
```
在这个示例代码中,我们先初始化所有节点,然后读入每一条边,将其添加到对应的链表中。由于是无向图,我们需要同时将两个方向的边都添加。
最后,我们可以通过调用`createGraph`函数来创建邻接表表示的无向图。
阅读全文