#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100//最大顶点数
typedef struct
{
int vexs[MAXVEX];//存储顶点的数组
int matrix[MAXVEX][MAXVEX];//存储邻接矩阵的二维数组
int vexnum, edgenum;//顶点数+边数
}MGraph;
//创建有向图的邻接矩阵
void CreateMGraph(MGraph* G)
{
int i, j, k, w;
printf("请输入顶点数和边数\n");
scanf("%d%d", &G->vexnum, &G->edgenum);
printf("请输入顶点信息\n");
//数组顶点信息(结点)
for (i = 0; i < G->vexnum; i++)
{
scanf("%d", &G->vexs[i]);
}
//初始化邻接矩阵的二维数组
for (i = 0; i < G->vexnum; i++)
{
for (j = 0; j < G->vexnum; j++)
{
G->matrix[i][j] = 0;
}
}
printf("请输入边的信息\n");
for (k = 0; k < G->edgenum; k++)
{
printf("请输入边(vi,vj)的下标i,下标j以及权值w\n");
scanf("%d%d%d", &i, &j, &w);
G->matrix[i][j] = w;
}
}
//打印
void printMGraph(MGraph G)
{
int i, j;
printf("邻接矩阵为\n");
for (i = 0; i < G.vexnum; i++)
{
for (j = 0; j < G.vexnum; j++)
{
printf("%d ", G.matrix[i][j]);
}
printf("\n");
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
printMGraph(G);
return 0;
}
输入内容:
请输入顶点数和边数
6 10
请输入顶点信息
1 2 3 4 5 6
请输入边的信息
请输入边(vi,vj)的下标i,下标j以及权值w
0 1 5
请输入边(vi,vj)的下标i,下标j以及权值w
0 3 7
请输入边(vi,vj)的下标i,下标j以及权值w
1 2 4
请输入边(vi,vj)的下标i,下标j以及权值w
2 0 8
请输入边(vi,vj)的下标i,下标j以及权值w
2 5 9
请输入边(vi,vj)的下标i,下标j以及权值w
3 2 5
请输入边(vi,vj)的下标i,下标j以及权值w
3 5 6
请输入边(vi,vj)的下标i,下标j以及权值w
4 3 5
请输入边(vi,vj)的下标i,下标j以及权值w
5 0 3
请输入边(vi,vj)的下标i,下标j以及权值w
5 4 1
邻接矩阵为
0 5 0 7 0 0
0 0 4 0 0 0
8 0 0 0 0 9
0 0 5 0 0 6
0 0 0 5 0 0
3 0 0 0 1 0书本是用∞来代替我这里0的,但是我用了0代替∞;
邻接矩阵的无向网

在CreateMGraph函数的这个这个for循环中添加这一行代码
G->matrix[j][i] = G->matrix[i][j];//不能弄反,因为G->matrix[j][i]是没有值的,需要被赋予
输入内容:
请输入顶点数和边数
5 6
请输入顶点信息
1 2 3 4 5
请输入边的信息
请输入边(vi,vj)的下标i,下标j以及权值w
0 1 2
请输入边(vi,vj)的下标i,下标j以及权值w
0 3 4
请输入边(vi,vj)的下标i,下标j以及权值w
1 2 3
请输入边(vi,vj)的下标i,下标j以及权值w
1 4 5
请输入边(vi,vj)的下标i,下标j以及权值w
2 3 4
请输入边(vi,vj)的下标i,下标j以及权值w
2 4 5
邻接矩阵为
0 2 0 4 0
2 0 3 0 5
0 3 0 4 5
4 0 4 0 0
0 5 5 0 0//无向都是对称的
4419

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



