最小生成树
我写了个最小生成树prim算法,但是不管怎么测试,输出结果都是0,请各位高手帮我看看测试数据:
输入:
7 11
1 2 7
1 4 5
2 3 8
2 4 9
2 5 7
3 5 5
4 5 15
4 6 6
5 6 8
5 7 9
6 7 11
输出:
39
#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]={0};
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&&min>dis[j])
{
min=dis[j];
k=j;
}
if(min==MAX) break;
sum=sum+min;
mark[k]=1;
for(j=0;j<n;j++)
if(mark[j]==0&&dis[j]>map[k][j])
{
dis[j]=map[k][j];
mark[j]=k;
}
}
printf("%d\n",sum);
}
int main()
{
long map[100][100];
int m,n,i,j;
int start,end,length;
scanf("%d %d",&n,&m);
for(i=0;i<100;i++)
for(j=0;j<100;j++)
map[i][j]=MAX;
for(i=0;i<m;i++)
{
scanf("%d %d %d",&start,&end,&length);
map[end][start]=map[start][end]=length;
}
start=0;
prim(map,n,start);
system("pause");
return 0;
}