//6 10
//1 2 3 4 5 6
//0 1 6
//0 2 1
//0 3 5
//1 2 5
//1 4 3
//2 3 5
//2 4 6
//2 5 4
//3 5 2
//4 5 6
#include<stdio.h>
#define MVNum 100 //图的最大顶点数
#define MAXint 32767 //用有符号的int最大值表示无穷大
typedef char vertextype; //定义定点的存储信息为字符型
typedef int arctype; //定义边的权值为int型
//图的邻接矩阵的存储结构
typedef struct
{
vertextype vertex[MVNum]; //顶点表
arctype arc[MVNum][MVNum]; //邻接矩阵
int vertexnum; //图的当前顶点数
int arcnum; //图的当前边数
}AMGraph;
//邻接矩阵创建无向网
void CreateMGraph1(AMGraph &G)
{
printf("请输入要创建图的顶点数和边数:");
scanf("%d%d",&G.vertexnum,& G.arcnum) ;//输入顶点数和边数
printf("请输入各个顶点;");
for(int i = 0; i < G.vertexnum; i++) //输入顶点信息
{
scanf("%d",&G.vertex[i]);
}
for(int i = 0; i < G.vertexnum; i++) //将所有边初始化为无穷大
for(int j = 0; j < G.vertexnum; j++)
G.arc[i][j] = MAXint;
for(int k = 0; k < G.arcnum; k++)
{
int i, j, w;
printf("请输入相邻两边及其权值:");
scanf("%d%d",&i,&j) ;//输入构成边的两个顶点
scanf("%d",&w);//输入边所对应的权值
G.arc[i][j] = w;
G.arc[j][i] = G.arc[i][j]; //无向图的邻接矩阵为对称矩阵
}
}
//打印邻接矩阵
void PrintfMGraph(AMGraph G)
{
printf("邻接矩阵如下所示\n");
for(int i = 0; i < G.vertexnum; i++)
{
for(int j = 0; j < G.vertexnum; j++)
printf("%d\t", G.arc[i][j]);
printf("\n");
}
}
int main()
{
AMGraph G;
CreateMGraph1(G);
PrintfMGraph(G);
return 0;
}
图的邻接矩阵
最新推荐文章于 2024-10-09 16:23:44 发布