-->
当前位置:首页 > 题库 > 正文内容

程序填空题:图的建立-邻接表

Luz3年前 (2022-05-01)题库1512
的值本题要求建立一个无向图,采用邻接表做为存储结构。
例如

![QQ截图20190522185944.png](~/aca65678-0a30-46ff-a7df-b3df473b9828.png)


输入信息为:第一行给出图的顶点数n和边数e。第二行给出n个字符,表示n个顶点的数据元素的值。后面是e行,给出每一条边的两个顶点编号。

输出每个顶点的值以及各顶点的邻接点的值。
输入样例为:

7 9

0123456

0 2

0 3

0 4

1 3

1 5

2 3

2 5

4 5

5 6

输出样例为

0: 4 3 2

1: 5 3

2: 5 3 0

3: 2 1 0

4: 5 0

5: 6 4 2 1

6: 5


c++
#include <stdio.h>
#include <stdlib.h>
#define MVNum 100 //最大顶点数
typedef struct ArcNode{ //表结点
int adjvex; //邻接点的位置
struct ArcNode * nextarc; //指向下一个表结点的指针
}ArcNode;
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;
scanf("%d%d",&G->vexnum,&G->arcnum);
getchar();
for(i=0;i<G->vexnum;i++)
scanf("%c",);
for(i=0;i<G->vexnum;i++)
;
for(k=0;k<G->arcnum;k++) {
scanf("%d%d",&i,&j);
s=(ArcNode*)malloc(sizeof(ArcNode));
s->adjvex=j;
s->nextarc=G->vertices[i].firstarc;
;
s=(ArcNode*)malloc(sizeof(ArcNode));
s->adjvex=i;
;
;
}
}
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(" %c",G.vertices[p->adjvex].data);
printf("\n");
}
}







答案:
第1空:&G->vertices[i].data

第2空:G->vertices[i]. firstarc=NULL

第3空:G->vertices[i].firstarc=s

第4空:s->nextarc=G->vertices[j].firstarc

第5空:G->vertices[j].firstarc=s

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。