首页 新闻 会员 周边

Prim算法求最小生成树

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-06-15 12:40

不久前测试过的代码,本来没有问题的,今天重新打开的时候测试结果出错了,找了半天还没发现是什么问题,求各位大神帮菜鸟我指出啊!!!!

源码如下:

#include <iostream>
using namespace std;

struct{
int vex;
int weight;
} edge[100];

struct{
int vex1;
int vex2;
} tag[100];


void Prim(int a[100][100],int n, int m)
{
edge[0].vex=0;
int min=5201314;
for(int i=0;i<n;i++)
{
for(int k=0;k<=i;k++)
{
for(int j=0;j<n;j++)
{

if(a[edge[k].vex][j]<min)
{
min=a[edge[k].vex][j];
edge[i].weight=min;
edge[i+1].vex=j;
tag[i].vex1=edge[k].vex;
tag[i].vex2=j;
}
}
}
for( int k=0;k<n;k++)
{
a[k][tag[i].vex1]=5201314;
a[k][tag[i].vex2]=5201314;
}
}

for(int i=0;i<n-1;i++)//冒泡排序
{
for(int j=0;j<n-i-1;j++)
{
if(edge[j].weight>edge[j+1].weight)
{
int temp=edge[j].weight;
edge[j].weight=edge[j+1].weight;
edge[j+1].weight=temp;
}
}
}

cout<<"连结起来的端点分别有:"<<endl;
for(int i=0;i<n-1;i++)
{
cout<<tag[i].vex1<<" "<<tag[i].vex2<<endl;
}
}

int main()
{
cout<<"请输入图中点和边的数目:"<<endl;
int n,m;//点,边
cin>>n>>m;
int a[100][100];
for(int k=0;k<m;k++)
{
for(int x=0;x<m;x++)
{
a[k][x]=5201314;//假设最大权值为5201314
}
}
cout<<"请分别输入每条边的两个端点及其的权:"<<endl;
for(int k=0;k<m;k++)//初始化
{
int s,e,w;
cin>>s>>e>>w;
a[s][e]=w;
a[e][s]=w;
}


Prim(a,n,m);


return 0;
}

 测试的数据是这样的:

6 10

0 1 6

0 2 1

0 3 5

1 2 5

1 4 3

2 3 5

2 4 6

2 5 4

4 5 6

3 5 2

本来测试的结果应该是:

2 0

5 2

3 5

1 2

4 1

但是我现在测试出来的结果是:

2 0 

0 0

0 0 

0 0 

0 0 

求大神解救啊!!

小菜刚的主页 小菜刚 | 初学一级 | 园豆:74
提问于:2012-06-14 16:59
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册