#include<stdio.h>
#define MaxInt 32767
#define MVNum 100
typedef struct
{
char vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int LocateVex(AMGraph G,char v)
{
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==v)
return i;
}
//算法6.1采用邻接矩阵表示法创建无向网
int CreateUDN(AMGraph *G)
{//采用邻接矩阵表示法,创建无向网G
char a;
printf("输入总顶点数,总边数,并用“,”隔开\n");
scanf("%d,%d",&G->vexnum,&G->arcnum);
scanf("%c",&a);//吃掉回车键
printf("依次输入顶点的信息:");
for(int i=0;i<G->vexnum;i++)
scanf("%c",&G->vexs[i]);
scanf("%c",&a);//吃掉回车键
for(int i=0;i<G->vexnum;i++)
for(int j=0;j<G->vexnum;j++)
G->arcs[i][j]=MaxInt;
printf("下面开始构造邻接矩阵:");
char v1,v2;int w,i,j;
for(int k=0;k<G->arcnum;k++)
{
printf("\n输入一条边依附的顶点及权值:");
scanf("%c%c%d",&v1,&v2,&w);
scanf("%c",&a);
i=LocateVex(*G,v1);j=LocateVex(*G,v2);
G->arcs[i][j]=w;
G->arcs[j][i]=G->arcs[i][j];
}
return 0;
}
int PrintUDN(AMGraph G)
{
int i,j;
printf("顶点元素是:");
for(i=0;i<G.vexnum;i++)
printf("vexs[%d]=%c ",i,G.vexs[i]);
printf("\n构造的邻接矩阵是:\n");
for(i=0;i<G.vexnum;i++)
{
for(j=0;j<G.vexnum;j++)
printf("%7d ",G.arcs[i][j]);
printf("\n");
}
}
int main()
{
AMGraph G;
CreateUDN(&G);
PrintUDN(G);
return 0;
}
【数据结构C语言】邻接矩阵
最新推荐文章于 2024-05-18 08:52:07 发布