用C语言编写一个算法求无向图采用邻接表作为存储结构求一个顶点的度的算法
时间: 2024-04-30 12:21:30 浏览: 106
算法功能:采用邻接表存储结构建立无向图.pdf
以下是用C语言编写的求无向图邻接表存储结构中一个顶点的度的算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define OK 1
#define ERROR 0
// 邻接表结构体
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;
// 求一个顶点的度
int degree(ALGraph G, int v) {
int i, count = 0;
ArcNode *p = G.vertices[v].firstarc;
while (p != NULL) {
count++;
p = p->nextarc;
}
return count;
}
int main() {
int i, v;
ALGraph G;
printf("请输入顶点数和边数:");
scanf("%d %d", &G.vexnum, &G.arcnum);
printf("请输入每个顶点的信息:\n");
for (i = 0; i < G.vexnum; i++) {
scanf("%d", &G.vertices[i].data);
G.vertices[i].firstarc = NULL;
}
printf("请输入每条边的两个顶点序号(从0开始):\n");
for (i = 0; i < G.arcnum; i++) {
int v1, v2;
scanf("%d %d", &v1, &v2);
ArcNode *p1 = (ArcNode *)malloc(sizeof(ArcNode));
p1->adjvex = v2;
p1->nextarc = G.vertices[v1].firstarc;
G.vertices[v1].firstarc = p1;
ArcNode *p2 = (ArcNode *)malloc(sizeof(ArcNode));
p2->adjvex = v1;
p2->nextarc = G.vertices[v2].firstarc;
G.vertices[v2].firstarc = p2;
}
printf("请输入要求度的顶点序号(从0开始):");
scanf("%d", &v);
printf("顶点%d的度为%d\n", v, degree(G, v));
return 0;
}
```
使用方法:
1. 编译运行上述代码
2. 输入顶点数和边数
3. 输入每个顶点的信息
4. 输入每条边的两个顶点序号(从0开始)
5. 输入要求度的顶点序号(从0开始)
6. 输出结果:顶点的度
阅读全文