void CreatMGraph(MGraph &G) { int i, j, k; scanf("%d%d", &G.vexnum, &G.arcnum); getchar(); //读取换行符 for (i = 0; i < G.vexnum; i++) { scanf("%c", &G.vexs[i]); getchar(); //读取换行符 } for (i = 0; i < G.vexnum; i++) for (j = 0; j < G.vexnum; j++) G.arcs[i][j] = 0; for (k = 0; k < G.arcnum; k++) { scanf("%d,%d", &i, &j); getchar(); //读取换行符 G.arcs[i][j] = 1; G.arcs[j][i] = 1; //无向图需要将两个方向都置为1 } for (i = 0; i < G.vexnum; i++) { printf("%d:", i); for (j = 0; j < G.vexnum; j++) { if (G.arcs[i][j] == 1) { printf(" %d", j); } } printf("\n"); } }
时间: 2024-04-02 13:31:13 浏览: 63
这段代码是用来创建一个无向图的邻接矩阵表示的函数。函数中的参数MGraph &G表示传入的图结构体变量的引用。函数首先读取输入的顶点数和边数,然后依次读取每个顶点的名称,并将邻接矩阵的所有位置初始化为0。接下来,循环读取每条边的起点和终点,并将其在邻接矩阵中的对应位置置为1(因为是无向图,所以需要将两个方向都置为1)。最后,函数输出邻接表表示的图。
需要注意的是,在读取顶点和边的输入时,需要使用getchar()函数读取换行符,否则会导致后面的输入读取错误。同时,该函数只适用于较小的图,因为邻接矩阵的空间复杂度为O(n^2),在图较大时会占用大量内存。
相关问题
void CreatMGraph(MGraph &G) { int i,j,k; scanf("%d,%d",&G.vexnum,&G.arcnum); for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) G.arcs[i][j]=0; for(i=0;i<G.vexnum;i++) scanf("%c",&G.vexs[i]); for(k=0;k<G.arcnum;k++) { scanf("%d,%d",&i,&j); G.arcs[i][j]=1; } for(i=0;i<G.arcnum;j++) { printf("%d:",i); for(j=0;j<G.vexnum;j++) { for(k=0;k<G.vexnum;k++) { if(G.arcs[j][k]==1) { printf(" %d",k); } } } printf("\n"); } }修改
void CreatMGraph(MGraph &G) {
int i, j, k;
scanf("%d%d", &G.vexnum, &G.arcnum);
getchar(); //读取换行符
for (i = 0; i < G.vexnum; i++) {
scanf("%c", &G.vexs[i]);
getchar(); //读取换行符
}
for (i = 0; i < G.vexnum; i++)
for (j = 0; j < G.vexnum; j++)
G.arcs[i][j] = 0;
for (k = 0; k < G.arcnum; k++) {
scanf("%d,%d", &i, &j);
getchar(); //读取换行符
G.arcs[i][j] = 1;
G.arcs[j][i] = 1; //无向图需要将两个方向都置为1
}
for (i = 0; i < G.vexnum; i++) {
printf("%d:", i);
for (j = 0; j < G.vexnum; j++) {
if (G.arcs[i][j] == 1) {
printf(" %d", j);
}
}
printf("\n");
}
}
用c语言编写代码:本题要求建立一个无向图,采用邻接矩阵做为存储结构。 函数接口定义: void CreatMGraph(MGraph &G);//创建图G int locate(MGraph G,char v);//返回顶点v的下标
好的,以下是用C语言编写的代码:
```c
#define MAX_VERTEX_NUM 100 // 最大顶点数
#define INFINITY 65535 // 表示无穷大
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 存储顶点信息
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储邻接矩阵
int vexnum, arcnum; // 图的当前顶点数和弧数
} MGraph;
// 创建图
void CreatMGraph(MGraph &G) {
int i, j, k, w;
char v1, v2;
printf("请输入图的顶点数和边数:");
scanf("%d %d", &G.vexnum, &G.arcnum);
// 初始化邻接矩阵
for (i = 0; i < G.vexnum; i++) {
for (j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = INFINITY;
}
}
// 输入顶点信息
printf("请输入图的顶点信息:");
for (i = 0; i < G.vexnum; i++) {
scanf(" %c", &G.vexs[i]);
}
// 输入边信息
printf("请输入图的边信息:\n");
for (k = 0; k < G.arcnum; k++) {
printf("请输入第%d条边的两个顶点和权值:", k + 1);
scanf(" %c %c %d", &v1, &v2, &w);
i = locate(G, v1);
j = locate(G, v2);
G.arcs[i][j] = w;
G.arcs[j][i] = w; // 无向图,因此需要将两个顶点之间的边都设置为同一个权值
}
}
// 返回顶点v的下标
int locate(MGraph G, char v) {
int i;
for (i = 0; i < G.vexnum; i++) {
if (G.vexs[i] == v) {
return i;
}
}
return -1; // 如果找不到顶点v,返回-1
}
```
这段代码实现了创建一个无向图,采用邻接矩阵作为存储结构,函数接口包括`CreatMGraph`和`locate`两个函数。`CreatMGraph`函数用于创建图,包括输入顶点数、边数、顶点信息和边信息,初始化邻接矩阵,并将边权值存储到邻接矩阵中;`locate`函数用于返回顶点v的下标。
阅读全文