不久前测试过的代码,本来没有问题的,今天重新打开的时候测试结果出错了,找了半天还没发现是什么问题,求各位大神帮菜鸟我指出啊!!!!
源码如下:
#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
求大神解救啊!!