您的位置:程序门 -> 专题开发/技术/项目 -> 数据结构与算法



prim算法,我不知哪里错了,请帮帮忙


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


prim算法,我不知哪里错了,请帮帮忙
发表于:2007-06-12 13:25:16 楼主
#include   <stdio.h>
#include   <stdlib.h>
#define   maxlen   10
#define   large   999
#define   null   0
typedef   struct
{   int   a[maxlen],b[maxlen],w[maxlen];
    char   vexs[maxlen];
    int   vexnum,arcnum;
    int   arcs[maxlen][maxlen];
}graph;
graph   g;

void   print_graph(graph   g)
{  
int   i,j;
printf( "邻接矩阵:\n ");
printf( "vertex\t ");
for(i=0;i <g.vexnum;i++)
printf( "%4c ",g.vexs[i]);
printf( "\n ");
        for(i=0;i <g.vexnum;i++)
{
printf( "%4c\t ",g.vexs[i]);
for(j=0;j <g.vexnum;j++)
printf( "%4d ",g.arcs[i][j]);
printf( "\n ");
}
}
graph   cre_grah(graph   g)
{
int   i,j,k,c=999;
for(i=0;i <g.vexnum;i++)
for(j=0;j <g.vexnum;j++)
g.arcs[i][j]=c;
for(k=0;k <g.arcnum;k++)
{
g.arcs[g.a[k]][g.b[k]]=g.w[k];
g.arcs[g.b[k]][g.a[k]]=g.w[k];
}
print_graph(g);
return   g;
}

void   prim(graph   g)
{   int   i,j,k,min;
    int   lowcost[maxlen];
    int   closet[maxlen];
    printf( "最小生成树的边为:\n ");
    for(i=1;i <g.vexnum;i++)
    {
    lowcost[i]=g.arcs[0][i];
    closet[i]=1;
    }
    closet[1]=0;
    j=1;
    for(i=1;i <g.vexnum;i++)
    {
    min=lowcost[j];
    k=i;
    for(j=1;j <g.vexnum;j++)
    if(lowcost[j] <min&&closet[j]!=0)
    {   min=lowcost[j];
    k=j;}
    printf( "(%c,%c), ",g.vexs[closet[k]],g.vexs[k]);
    closet[k]=0;
    for(j=1;j <g.vexnum;j++)
    if(g.arcs[k][j] <lowcost[j]&&closet[j]!=0)
    {   lowcost[j]=g.arcs[k][j];
    closet   [j]=k;
    }
    }
}
void   main()
{int   i,j,k;
  system( "cls ");
  printf( "请输入城市的个数,城市间道路的条数: ");
  scanf( "%d,%d ",&i,&j);
  g.vexnum=i;
  g.arcnum=j;
  for(i=0;i <g.vexnum;i++)
  {
  getchar();
  printf( "\n   第%d个顶点的信息: ",i+1);
  g.vexs[i]=getchar();
  }
  for(k=0;k <g.arcnum;k++)
  {
  printf( "\t   请输入第%d条边的起点: ",k);
  scanf( "%d ",&g.a[k]);
 
  printf( "\n   请输入第%d条边的终点: ",k);
  scanf( "%d ",&g.b[k]);
 
          printf( "\n   请输入第%d条边的权值: ",k);
          scanf( "%d ",&g.w[k]);
}
  cre_grah(g);
  prim(g);
}




发表于:2007-06-12 13:26:321楼 得分:0
最后的最小生成树没有输出正确结果


快速检索

最新资讯
热门点击