#include<stdio.h>
#include<stdlib.h>
#define MaxVertexNum 100 //顶点数目最大值
typedef char VertexType; //顶点的数据类型
typedef int EdgeType; //带权图边上权值的数据类型
typedef struct{
VertexType vex[MaxVertexNum]; //顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum]; //边表(邻接矩阵)
int vexnum,arcnum; //图当前顶点数和弧度数
}MGraph;
void CreatGraph(MGraph *g);
void VisitGraph(MGraph g);
int main(){
MGraph g;
CreatGraph(&g);
VisitGraph(g);
return 0;
}
void CreatGraph(MGraph *g){
int i = 0,j = 0,k = 0,w = 0;//i,j,k为计数器,w则为边权值
if(g!=NULL)
{
printf("输入图顶点数和弧度数\n");
scanf("%d%d",&g->vexnum,&g->arcnum);//输入顶点,边个数
for(i = 0; i < g->vexnum;i++)
{
printf("输入第%d个顶点名称:\n",i);
scanf("\n%c",&g->vex[i]);//输入顶点数据(名称)
}
printf("\n");
for(i = 0;i < g->vexnum;i++) //初始化邻接矩阵
{
for(j = 0;j < g->vexnum;j++)
{
g->Edge[i][j] = 0;
}
}
printf("请按照以下格式(i,j,w)输入:\n");
for(k = 0;k<g->arcnum;k++)
{
printf("请输入第%d对邻接点以及依附边的权值:",k+1);
scanf("%d%d%d",&i,&j,&w);
g->Edge[i][j] = w;
}
}
}
void VisitGraph(MGraph g){
int i = 0,j = 0;
printf("邻接矩阵如下图示意:\n");
for(i = 0;i < g.vexnum;i++)
{
for(j = 0;j < g.vexnum;j++)
{
printf("%d ",g.Edge[i][j]);
if(j == g.vexnum -1)
printf("\n");
}
}
}