当前位置: 代码迷 >> C语言 >> 小女子求助
  详细解决方案

小女子求助

热度:189   发布时间:2007-03-19 22:40:33.0
小女子求助
这是一个求最小生成树的代码,先输入结点个数,再输入一个方阵,表示这些结点之间的距离,但是经过系统评测是错误的,有大牛帮忙一下小女子吗
#include<stdio.h>
int a[1002][1002];
int b[1002];
int c[1002];
main()
{
int n,i,j,l,k,m,p,min,sum;

while((scanf("%d",&n))!=EOF)
{
sum=0;
for(i=1;i<=n;i++)
{
b[i]=0;
c[i]=0;
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
}
m=1;
c[1]=1;
b[1]=1;
for(i=1;i<=n-1;i++)
{
min=200;
if(i<=n/2)
{
for(j=1;j<=m;j++)
{
j=c[j];
for(k=1;k<=n;k++)
if(b[k]==0 && j!=k && a[j][k]<min)
{
min=a[j][k];
p=k;
}
}
sum=sum+min;
b[p]=1;
c[m+1]=p;
m++;
}
else
{
for(l=1;l<=n;l++)
if(b[l]==0)
{
for(k=1;k<=m;k++)
{
k=c[k];
if(a[l][k]<min && l!=k)
{
min=a[l][k];
p=l;
}
}
}
sum=sum+min;
b[p]=1;
c[m+1]=p;
m++;
}
}
printf("%d\n",sum);
}
return 0;
}
搜索更多相关的解决方案: 小女子  

----------------解决方案--------------------------------------------------------
难道没人回复吗?大家帮帮忙啊
----------------解决方案--------------------------------------------------------

看样子学数据结构要加快脚步了,nuciewth快过来帮忙看看


----------------解决方案--------------------------------------------------------
灌水

----------------解决方案--------------------------------------------------------

我来了,一点注释都没有.建议使用结构体.
先看看再说.


----------------解决方案--------------------------------------------------------
没看懂另外两个数组的用处.下面的可以合并.
for(i=1;i<=n-1;i++)
{
min=200;
if(i<=n/2)//下面的代码都是一样的.那为什么要判断?
{
for(j=1;j<=m;j++)
{
j=c[j];
for(k=1;k<=n;k++)
if(b[k]==0 && j!=k && a[j][k]<min)
{
min=a[j][k];
p=k;
}
}
sum=sum+min;
b[p]=1;
c[m+1]=p;
m++;
}
else
{
for(l=1;l<=n;l++)
if(b[l]==0)//这个可以放到下面
{
for(k=1;k<=m;k++)
{
k=c[k];
if(a[l][k]<min && l!=k)//
{
min=a[l][k];
p=l;
}
}
}
sum=sum+min;
b[p]=1;
c[m+1]=p;
m++;
}
}
printf("%d\n",sum);

for(i=1;i<=n-1;i++)
{
min=200;
for(j=1;j<=m;j++)
{
j=c[j];
for(k=1;k<=n;k++)
if(b[k]==0 && j!=k && a[j][k]<min)
{
min=a[j][k];
p=k;
}
}
sum=sum+min;
b[p]=1;
c[m+1]=p;
m++;
}

----------------解决方案--------------------------------------------------------
  相关解决方案