用c语言写一个图的创建,邻接矩阵或者邻接表都可以,可以自定义点的
时间: 2024-01-22 16:18:39 浏览: 68
以下是使用邻接矩阵表示的代码,其中包括了自定义点的功能。你可以根据自己的需求进行修改。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
typedef struct {
char name; // 点的名称
} VertexType;
typedef struct {
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 点数和边数
VertexType vexs[MAX_VERTEX_NUM]; // 存储点的信息
} MGraph;
int locateVertex(MGraph G, char c) { // 查找点在数组中的位置
for (int i = 0; i < G.vexnum; i++) {
if (G.vexs[i].name == c) {
return i;
}
}
return -1;
}
void createGraph(MGraph *G) { // 创建图
printf("请输入点数和边数:");
scanf("%d%d", &G->vexnum, &G->arcnum);
printf("请输入%d个点的名称:", G->vexnum);
for (int i = 0; i < G->vexnum; i++) {
scanf(" %c", &G->vexs[i].name);
}
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->edges[i][j] = 0;
}
}
printf("请输入%d条边的两个端点和权值:", G->arcnum);
char v1, v2;
int w;
for (int k = 0; k < G->arcnum; k++) {
scanf(" %c%c%d", &v1, &v2, &w);
int i = locateVertex(*G, v1);
int j = locateVertex(*G, v2);
G->edges[i][j] = w;
G->edges[j][i] = w; // 无向图
}
}
void printGraph(MGraph G) { // 输出图
printf("图的邻接矩阵为:\n");
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
printf("%d ", G.edges[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
createGraph(&G);
printGraph(G);
return 0;
}
```
阅读全文