用prim算法求最小生成树!哪里有问题呀改不明白了

#include<stdio.h>
#define MaxInt 100 //表示极大值100
#define MVNum 100 //最大顶点数100

typedef struct
{
char vexs[MVNum]; //顶点表
int arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前点数和边数
}AMGraph;

int LocateVex(AMGraph *G,char v) //定位节点位置函数
{
int i,w=-1;
for(i=0;ivexnum;i++)
if(v==G->vexs[i])
{
w=i;
break;
}

    return w;

}

void CreateUDN(AMGraph *G) //构造无向图函数 参考p155页
{
int i,j,k,w;
char v1,v2;
G->vexnum=8,G->arcnum=14; //图的点数为8,边数为14
strcpy(G->vexs,"abcdefgh");
for(i=0;ivexnum;i++)
for(j=0;jvexnum;j++)
G->arcs[i][j]=MaxInt;
printf("输入一条边依附的顶点及权值\n");
for(k=0;karcnum;k++)
{
scanf("%c%c%d",&v1,&v2,&w);
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G->arcs[i][j]=w;
G->arcs[j][i]=G->arcs[i][j];
}
}

struct{ //创造输出最小边上的权值函数
char adjvex;
int lowcost;
}closedge[MVNum];
int Min(int n)
{

 int min,i;
 for (i=0;i<n;i++)
 {
   if(closedge[i].lowcost!=0)

   {
      min=i;
      break;
   }
 }

for(i=0;i<n;i++)
{
if(closedge[i]. lowcost!=0&&closedge[i].lowcost<closedge[min].lowcost)
min=i;
}

return min;
}

void MiniSpanTree Prim(AMGraph* G,char u)
{

  int i,j,k,a,b;
  char u0, v0;
      k=LocateVex(G,u);
          for(j=0; j<G->vexnum;j++){
              if(j!=k)
              {

                 closedge[j].adivex=u;
                 closedge[j].lowcost=G->arcs[k][j];
              }
          }

          closedge[k].lowcost=0;
          printf("最小生成树的各条边分别为:\n");
          for(i=l,i<G->vexnum;i++) {
              k=Min(G->vexnum);
              u0=closedge[k],adivex;
              v0=G->vexs[k];
              a=LocateVex(G,u0);
              b=LocateVex(G,v0);
              printf("%d",G->arcs[a][b]);
              closedge[k],lowcost=0;
              for(j=0;j<G->vexnum;j++)
              {
                  if(G->arcs[k][j]<closedge[j].lowcost)
                  {
                      closedge[j].adjvex=G->vexs[k];
                      closedge[j].lowcost=G->arcs[k][j];
                  }
              }
          }
          printf("\n");

}
int main()
{
AMGraph G;
G=(AMGraph
)malloc(sizeof(AMGraph));
GreateUDN(G);
MiniSpanTree Prim(G,'a');
return 0;
}

img

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。