#include <stdio.h>
#include <stdlib.h>
typedef struct{
int vexnum;//点数量
int arcnum;//边数量
int **arcs;//边指针
char *vexs;//点名称
}iGraph;
typedef struct close{
int adjvex;//
int endvex;//
int lowcost;//最小权值
}*closedge,closedges;
void CreateUDN(iGraph &G);//创建无向图
int LocateVex(iGraph G,char v);//节点的顶点向量中的下标
void PrintUDN(iGraph G);//输出存储结构示意图
void MiniSpanTree_PRIM(iGraph G,closedge &minedge);//求最小生成树的算法
void PrintMinEdge(iGraph G,closedge minedge);//输出最小生成树的边
int main()
{iGraph G;
closedge minedge;
CreateUDN(G);
printf("\n");
MiniSpanTree_PRIM(G,minedge);
PrintMinEdge(G,minedge);
printf("\n");
return 0;
}
void CreateUDN(iGraph &G)
{int i,j,k,l,cost;
char name1,name2;
printf("请输入顶点数和边数,且边数大于或等于顶点数,用空格符隔开:\n");
scanf("%d %d",&G.vexnum,&G.arcnum);
getchar();
G.vexs=(char *)malloc(G.vexnum*sizeof(char));//开辟空间
for(i=0;i<G.arcnum;i++)
G.arcs=(int **)malloc(G.arcnum*sizeof(int *));
for(i=0;i<G.arcnum;i++)
G.arcs[i]=(int *)malloc(G.arcnum*sizeof(int));
printf("请输入各顶点名字,回车确认:\n");
for(i=0;i<G.vexnum;i++)
{scanf("%c",&G.vexs[i]);
getchar();}
printf("请输入图中各边,按回车结束一条边的输入,输入结束按回车执行,输入格式为:端点-端点-权值\n");
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=100000; //使边的权值初始化为最大
for(i=0;i<G.arcnum;i++)
{
scanf("%c-%c-%d",&name1,&name2,&cost);
getchar();
for(j=0;j<G.vexnum;j++)//在表中查找点
{ if(name1==G.vexs[j])
k=j;
if(name2==G.vexs[j])
l=j;
}
if(k==l)//两个点如果相同,报错