最小生成树prim算法
题目:http://www.这道题需要用prim算法解决,可是代码写好了以后不管怎么测试,结果输出都是4,请各位高手帮我看看
输入:
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
输出:
28
代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 999999
int dis[100];
void prim(long map[100][100],int n,int start)
{
int mark[100];
int i,j,k,min,sum=0;
for(i=0;i<n;i++)
{
mark[i]=0;
dis[i]=map[start][i];
}
mark[start]=1;dis[start]=0;
for(i=0;i<n;i++)
{
min=MAX;
for(j=0;j<n;j++)
if(mark[j]==0&&dis[j]<min)
{
min=dis[j];
k=j;
}
if(min==MAX) break;
sum=sum+min;
for(j=0;j<n;j++)
if(mark[j]==0&&dis[j]>map[k][j])
dis[j]=map[k][j];
}
printf("%d\n",sum);
}
int main()
{
long map[100][100];
int n,i,j;
scanf("%d",&n);
for(i=0;i<100;i++)
for(j=0;j<100;j++)
map[i][j]=MAX;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%ld",&map[i][j]);
prim(map,n,0);
system("pause");
return 0;
}