C语言邻接矩阵输入尾插法建立邻接表
时间: 2023-10-18 09:16:31 浏览: 106
图的邻接表转邻接矩阵和深度遍历
好的,以下是C语言代码示例,演示了如何通过邻接矩阵输入尾插法建立邻接表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
// 邻接表结点
typedef struct Node {
int adjvex; // 邻接点下标
struct Node *next; // 指向下一个邻接点的指针
} Node;
// 顶点
typedef struct Vertex {
int data; // 顶点值
Node *first; // 指向第一个邻接点的指针
} Vertex;
// 邻接表
typedef struct {
Vertex vertices[MAX_VERTEX_NUM]; // 顶点数组
int vexnum, arcnum; // 顶点数和边数
} Graph;
// 初始化邻接表
void InitGraph(Graph *G, int vexnum) {
G->vexnum = vexnum;
G->arcnum = 0;
for (int i = 0; i < vexnum; i++) {
G->vertices[i].data = i; // 顶点值
G->vertices[i].first = NULL; // 指向第一个邻接点的指针
}
}
// 插入边
void InsertArc(Graph *G, int v1, int v2) {
Node *p = (Node*)malloc(sizeof(Node));
p->adjvex = v2;
p->next = G->vertices[v1].first;
G->vertices[v1].first = p;
G->arcnum++;
}
// 创建邻接表
void CreateGraph(Graph *G) {
int v1, v2;
printf("请输入顶点数和边数:");
scanf("%d%d", &G->vexnum, &G->arcnum);
for (int i = 0; i < G->arcnum; i++) {
printf("请输入边(vi,vj)的顶点序号:");
scanf("%d%d", &v1, &v2);
InsertArc(G, v1, v2);
}
}
// 打印邻接表
void PrintGraph(Graph *G) {
printf("邻接表如下:\n");
for (int i = 0; i < G->vexnum; i++) {
printf("%d", G->vertices[i].data);
Node *p = G->vertices[i].first;
while (p) {
printf("->%d", G->vertices[p->adjvex].data);
p = p->next;
}
printf("\n");
}
}
int main() {
Graph G;
CreateGraph(&G);
PrintGraph(&G);
return 0;
}
```
希望这个代码示例能够帮助您更好地理解邻接矩阵输入尾插法建立邻接表的过程。
阅读全文