#include <stdio.h>
#include <stdlib.h>
#define MVNum 100 //最大顶点数
//边表结构体
typedef struct ArcNode { //表结点
int adjvex; //邻接点的位置
struct ArcNode* nextarc; //指向下一个表结点的指针
}ArcNode;
//顶点结构体,其中 ArcNode* firstarc是指向边表结构体的指针
typedef struct VNode {
char data; //顶点信息
ArcNode* firstarc; //指向第一个表结点的指针
}VNode, AdjList[MVNum]; //AdjList表示邻接表类型
//初始化顶点数,边数,以及指向顶点结构体
typedef struct {
AdjList vertices; //头结点数组
int vexnum, arcnum; //图的当前顶点数和边数
}ALGraph;
void CreatMGraph(ALGraph* G); /* 创建图 */
void printGraph(ALGraph G); /*输出图 */
int main()
{
ALGraph G;
CreatMGraph(&G);
printGraph(G);
return 0;
}
void CreatMGraph(ALGraph* G)
{
int i, j, k;
ArcNode* s;
printf("请输入顶点总数+边数\n");
scanf("%d%d", &G->vexnum, &G->arcnum); //输入总顶点数,总边数
getchar();//吸收scanf残留的换行符
printf("请输入顶点数的顶点有哪些\n");
for (i = 0; i < G->vexnum; i++)
{ //输入各点,构造表头节点表
scanf("%c", &G->vertices[i].data); //输入顶点值
}
for (i = 0; i < G->vexnum; i++)
{
G->vertices[i].firstarc = NULL; //初始化表头节点的指针域为NULL
}
for (k = 0; k < G->arcnum; k++)
{
printf("请输入边数(vi,vj),一共有%d条边数\n", G->arcnum); //输入各边,构造邻接表
scanf("%d%d", &i, &j); //输入一条边的两个节点
s = (ArcNode*)malloc(sizeof(ArcNode)); // 生成一个新节点
s->adjvex = j;
s->nextarc = G->vertices[i].firstarc; //头插法建立新节点
G->vertices[i].firstarc = s;
}
}
void printGraph(ALGraph G)
{
int i, j;
ArcNode* p;
for (i = 0; i < G.vexnum; i++)
{
printf("%c:", G.vertices[i].data);//打印顶点
for (p = G.vertices[i].firstarc; p; p = p->nextarc)//打印顶点对应的边表结点
{
printf(" %d", p->adjvex);
}
printf("\n");
}
}
终端输入内容如下:
请输入顶点总数+边数
6 10
请输入顶点数值
012345
请输入边数(vi,vj),一共有10条边数
0 1
请输入边数(vi,vj),一共有10条边数
0 3
请输入边数(vi,vj),一共有10条边数
1 2
请输入边数(vi,vj),一共有10条边数
2 0
请输入边数(vi,vj),一共有10条边数
2 5
请输入边数(vi,vj),一共有10条边数
3 2
请输入边数(vi,vj),一共有10条边数
3 5
请输入边数(vi,vj),一共有10条边数
4 3
请输入边数(vi,vj),一共有10条边数
5 4
请输入边数(vi,vj),一共有10条边数
5 0
0: 3 1
1: 2
2: 5 0
3: 5 2
4: 3
5: 0 4
边数记的是出度
340

被折叠的 条评论
为什么被折叠?



