图的邻接矩阵
将图的各点信息存入一个一维数组,将边(两点组成)及其权存入一个二维数组。
结构体:
#include<stdio.h>
#include<stdlib.h>
#define Max 100 //假设包含100个顶点
typedef struct{ //包含权的邻接矩阵的的定义
int point[Max]; //顶点信息的数组
int side[Max][Max]; //边的权信息的数组
int nowp; //创建图的顶点数
int nows; //创建图的边数
}map;
创建矩阵:
void CreateGraph(map *G) //图的生成函数
{
int n,e,vi,vj,w,i,j;
printf("请输入图的顶点数和边数:");
scanf("%d%d",&G->nowp,&G->nows);
for(i=0;i<G->nowp;i++) //图的初始化
for(j=0;j<G->nowp;j++)
{
if(i==j)
G->side[i][j]=0;//对角线均初始化为0
else
G->side[i][j]=-1;//其余全初始化为-1,-1为两点未连接
}
for(i=0;i<G->nowp;i++) //将顶点存入数组中
{
printf("请输入第%d个顶点的信息(整型):",i+1);
scanf("%d",&G->point[i]);
}
printf("\n");
for(i=0;i<G->nows;i++)
{
printf("请输入边的信息点a,点b,权值:");
scanf("%d%d%d",&vi,&vj,&w);
G->side[vi-1][vj-1]=w;//因为为无向图,所以数关于对角线对称
G->side[vj-1][vi-1]=w;
}
}
打印出所见矩形:
void print(map G) //输出邻接矩阵的信息
{
int i,j;
printf("\n输出顶点的信息(整型):\n");
for(i=0;i<G.nowp;i++)
printf("%8d",G.point[i]);
printf("\n输出邻接矩阵:\n");
printf("\t");
for(i=0;i<G.nowp;i++)
printf("%8d",G.point[i]);
printf("\n");
for(i=0;i<G.nowp;i++)
{
printf("\n%8d",i+1);
for(j=0;j<G.nowp;j++)
{
printf("%8d",G.side[i][j]);
}
printf("\n");
}
}
主函数:
int main()
{
map G;
CreateGraph(&G);
print(G);
return 0;
}