这是c++prim算法 运行结果有错误 琢磨了n天了,还是没办法 谁能帮我搞定一下 万分感谢
//c++的prim算法
#include <iostream>
using namespace std;
const int max_num=100;
int minedge[max_num][max_num];//括号内是两个点,此数组的值为两个点的权值
typedef struct {
int z;
int N;
int f;
}dian;
dian a[max_num];
class prim{
int w;
public:
prim()
{
n = 0;
for (int i = 0; i < max_num; i++)
{
visited[i] = false;
a[i].f = 0;//已访问的点
a[i].N = 0;//未被访问的点
a[i].z = 0;//权值
}
}
//创建一个带权值的图
void creatgraph(){
int i,j,x;
cout<<"请输入顶点数"<<endl;
cin>>n;
cout<<"请输入这两个顶点是否为邻接点,如果是,输入其权值,否则请输入-1"<<endl;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
cout<<i<<j<<endl;
cin>>x;
minedge[i][j]=x;
}
}
return;
}
void Prim(){
int i,j;
for(i=1;i<=n;i++)
visited[i]=false;//初始化将所有的点设置成未被访问
get_minedge(1);//从1开始
j=get_minedge(1);//j是距离1权值最小的点
cout<<a[w].z<<" "<<a[w].f<<" "<<a[w].N<<endl;
for(i=1;i<n;i++){
get_minedge(j);//距离j权值最小的
j=get_minedge(j);//j已被访问得点
cout<<a[w].z<<" "<<a[w].f<<" "<<a[w].N<<endl;
}
return;
}
int get_minedge(int v){
int i,min,k;
min=1000;
for(w=1;w<=n;w++){
for(i=1;i<=n;i++){
if(visited[i]==false&&minedge[v][i]<min)
min=minedge[v][i];}
a[w].z=min;
a[w].f=v;
a[w].N=i;}
//从已被访问的点中,选出它们最小的边
for(w=1;w<=n;w++){
if(a[w].z<min){
min=a[w].z;
k=a[w].N;
visited[k]=true;//将v设置成已被访问过的点
}
}
return k;
}
private:
int n;
int visited[max_num];
};
void main(){
prim p;
p.creatgraph();
p.Prim();
return ;
}