1. 存储结构
#define MaxVertexNum 10
#define MaxInt 0
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType Vex[MaxVertexNum];
EdgeType Edge[MaxVertexNum][MaxVertexNum];
int vexnum;
int arcnum;
}AMGraph;
2. 创建有向/无向图
bool CreateAMG(AMGraph& G,bool tag=false) {
printf("请输入总顶点数,总边数:");
scanf("%d %d", &G.vexnum, &G.arcnum);
if (G.vexnum > MaxVertexNum ) {
G.vexnum = G.arcnum = 0;
printf("创建图失败(最大%d个顶点)!\n", MaxVertexNum);
return false;
}
for (int i = 0; i < G.vexnum; i++) {
printf("请输入第%d个顶点的名称:", i + 1);
getchar();
scanf("%c", &G.Vex[i]);
}
printf("该图的顶点集创建完成!\n");
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
G.Edge[i][j] = MaxInt;
}
}
int weight = -1;
for (int i = 1; i <= G.arcnum; i++) {
VertexType v1, v2;
EdgeType weight;
printf("请依次输入第%d条边依附的顶点及权值:", i);
getchar();
scanf("%c %c %d", &v1, &v2, &weight);
int index1 = LocateVex(G, v1);
int index2 = LocateVex(G, v2);
if (index1 >= 0 && index2 >= 0) {
G.Edge[index1][index2] = weight;
if (!tag) {
G.Edge[index2][index1] = G.Edge[index1][index2];
}
}
else {
G.vexnum = G.arcnum = 0;
printf("创建图失败(顶点不存在)!\n");
return false;
}
}
printf("边集创建完成!\n");
printf("该图创建完成!\n");
return true;
}
3. 输出图
void PrintAMGrap(AMGraph G) {
for (int i = 0; i < G.vexnum;i++) {
for (int j = 0; j < G.vexnum; j++) {
printf("%d ", G.Edge[i][j]);
}
printf("\n");
}
}
4. 验证代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
AMGraph G;
CreateUDG(G);
PrintAMGrap(G);
return 0;
}