#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char VertexType[5]; //存储顶点值
#define MaxSize 50
#define INIT 10000
typedef struct //邻接矩阵,存储弧的信息
{
int adj;
}ArcNode,AdjMatrix[MaxSize][MaxSize];
typedef struct //图的类型定义
{
VertexType vex[MaxSize]; //存储顶点值
AdjMatrix arc; //邻接矩阵
int arcnum,vexnum; //前者弧数,后者顶点数
}MGraph;
void CreateVertex(MGraph *G) //创建邻接矩阵
{
int i,j,k,w;
VertexType v1,v2;
printf("请输入有向带权图的顶点数和弧数:(空格间隔)\n");
scanf("%d%d",&(*G).vexnum,&(*G).arcnum);
printf("请输入%d个顶点的值:\n",G->vexnum);
for ( i=0 ; i<G->vexnum ; i++ )
{
scanf("%s",&G->vex[i]);
}
for ( i=0 ; i<G->vexnum ; i++ ) //初始化邻接矩阵
{
for ( j=0 ; j<G->vexnum ; j++ )
{
G->arc[i][j].adj = INIT;
}
}
printf("请输入%d条弧的弧尾,弧头和权值:\n",G->arcnum);
for ( k=0 ; k<G->arcnum ; k++ )
{
scanf("%s%s%d",v1,v2,&w);
i = LocateVertex(*G,v1);
j = LocateVertex(*G,v2);
G->arc[i][j].adj = w;
}
}
int LocateVertex(MGraph G,VertexType v) //索引
{
int i;
for ( i=0 ; i<G.vexnum ; i++ )
{
if ( strcmp(G.vex[i],v) == 0 )
{
return i;
}
}
return -1;
}
void DisplayVertex(MGraph G) //输出
{
int i,j;
printf("%d个顶点的值为:",G.vexnum);
for ( i=0 ; i<G.vexnum ; i++ )
{
printf("%s ",G.vex[i]);
}
printf("\n有向带权图\n");
printf("序号:");
for ( i=0 ; i<G.vexnum ; i++ )
{
printf("%8d",i);
}
printf("\n");
for ( i=0 ; i<G.vexnum ; i++ )
{
printf("%8d",i);
for ( j=0 ; j<G.vexnum ; j++ )
{
printf("%8d",G.arc[i][j].adj);
}
printf("\n");
}
}
int main(void)
{
MGraph G;
printf("创建图:\n");
CreateVertex(&G);
printf("输出图:");
DisplayVertex(G);
printf("\n");
return 0;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。