本题要求建立一个无向图,采用邻接矩阵做为存储结构。 例如 image.png 函数接口定义: void CreatMGraph(MGraph &G);//创建图G int locate(MGraph G,char v);//返回顶点v的下标 G 为图,采用邻接矩阵存储结构,v 是顶点的值。 裁判测试程序样例: #include <stdio.h> #define MVNum 100 //最大顶点数 typedef struct{ char vexs[MVNum]; //存放顶点的一维数组 int arcs[MVNum][MVNum]; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和边数 }MGraph; void CreatMGraph(MGraph &G);/* 创建图 */ void printGraph(MGraph G);/*输出图 */ int locate(MGraph G,char v);//返回顶点v的下标 int main() { MGraph G; CreatMGraph(G);//创建图G printGraph(G);//打印该图 return 0; } void printGraph(MGraph G)//打印图 { int i,j; for(i=0;i<G.vexnum;i++) { printf("%c:",G.vexs[i]); for(j=0;j<G.vexnum;j++) if (G.arcs[i][j]) printf(" %c",G.vexs[j]); printf("\n"); } } /* 请在这里填写答案 */ 输入信息为:第一行给出图的顶点数n和边数e。第二行给出n个字符,表示n个顶点的数据元素的值。后面是e行,给出每一条边的两个顶点的值(顶点之间无空格)。 输出每个顶点的值以及各顶点的邻接点的值。 输入样例: 7 9 0123456 02 03 04 13 15 23 25 45 56 输出样例: 0: 2 3 4 1: 3 5 2: 0 3 5 3: 0 1 2 4: 0 5 5: 1 2 4 6 6: 5
时间: 2024-03-22 17:39:48 浏览: 122
无向图的邻接矩阵存储及输出
以下是该题的参考答案,可以供你参考。
```
#include <stdio.h>
#define MVNum 100 //最大顶点数
typedef struct{
char vexs[MVNum]; //存放顶点的一维数组
int arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和边数
}MGraph;
int locate(MGraph G, char v)
{
for(int i=0;i<G.vexnum;i++){
if(G.vexs[i]==v){
return i;
}
}
return -1;
}
void CreatMGraph(MGraph &G)
{
scanf("%d%d", &G.vexnum, &G.arcnum);
getchar();
for(int i=0;i<G.vexnum;i++){
scanf("%c", &G.vexs[i]);
}
getchar();
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++){
G.arcs[i][j]=0;
}
}
for(int i=0;i<G.arcnum;i++){
char c1,c2;
scanf("%c%c", &c1, &c2);
getchar();
int v1=locate(G,c1);
int v2=locate(G,c2);
G.arcs[v1][v2]=1;
G.arcs[v2][v1]=1;
}
}
void printGraph(MGraph G)//打印图
{
int i,j;
for(i=0;i<G.vexnum;i++)
{
printf("%c:",G.vexs[i]);
for(j=0;j<G.vexnum;j++)
if (G.arcs[i][j]) printf(" %c",G.vexs[j]);
printf("\n");
}
}
int main() {
MGraph G;
CreatMGraph(G);//创建图G
printGraph(G);//打印该图
return 0;
}
```
这个程序的基本思路是:
1. 定义邻接矩阵结构体MGraph,其中包括顶点数组vexs、邻接矩阵数组arcs,以及当前图中顶点数vexnum和边数arcnum。
2. 通过函数CreatMGraph创建图,其中依次输入顶点数和边数,以及每个顶点的值和每条边的两个顶点的值。在创建过程中,通过locate函数可以找到每个顶点在顶点数组中的下标,从而在邻接矩阵中标记对应的边。
3. 通过函数printGraph打印图,其中依次遍历每个顶点,对于每个顶点,遍历邻接矩阵中对应的行,找到所有邻接点,输出即可。
以上程序中主要需要注意的点是:
1. 在读取输入时,需要注意读取完一个字符后需要调用getchar函数吸收掉后面的空格或换行符。
2. 在locate函数中,如果找不到对应的顶点,需要返回-1。
3. 在邻接矩阵中,如果两个顶点之间存在边,则对应的元素值为1;如果不存在边,则为0。由于是无向图,邻接矩阵是对称的,即两个顶点之间有边,则对应的两个元素都是1。
阅读全文