这是个c++prim算法的代码 有错误 查了n遍 不知怎么改 望大神指点一二
//c++的prim算法
#include <iostream>
using namespace std;
const int max=100;
int a[max];
int minedge[max][max];//括号内是两个点,此数组的值为两个点的权值
class prim{
public:
//创建一个带权值的图
void creatgraph(){
int n,i,j;
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;
}
int Prim(){
int i,w;
for(i=1;i<=n;i++)
visited[i]=false;//初始化将所有的点设置成未被访问
for(i=1;i<=n;i++){
if(visited[i]==false)
get_minedge(i);
cout<<a[w].z<<" "<<a[w].f<<" "<<a[w].N<<endl;}
return 0;
}
int get_minedge(int v){
int w,i,min;
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;
visited[a[w].N]=true;//将v设置成已被访问过的点
}
}
}
}
void main(){
prim p;
p.creatgraph();
p.Prim();
return ;
}
error C2628: 'prim' followed by 'void' is illegal (did you forget a ';'?)
E:\bn\b.cpp(56) : warning C4508: 'main' : function should return a value; 'void' return type assumed
执行 cl.exe 时出错.
C++ 算法 prim
[解决办法]
你这代码,要格式没格式,让别人看最起码能大概看清框架吧
[解决办法]
//c++的prim算法
#include <iostream>
using namespace std;
const int max_num=100;
int a[max_num];
int minedge[max_num][max_num];//括号内是两个点,此数组的值为两个点的权值
typedef struct {
int z;
int N;
int f;
}dian;
//typedef dian dianshuzu[max_num];
int w;
class prim{
public:
prim();
//创建一个带权值的图
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;
for(i=1;i<=n;i++)
visited[i]=false;//初始化将所有的点设置成未被访问
for(i=1;i<=n;i++){
if(visited[i]==false)
get_minedge(i);
cout<<a[w].z<<" "<<a[w].f<<" "<<a[w].N<<endl;}
return;
}
void get_minedge(int v){
int i,min;
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;
visited[a[w].N]=true;//将v设置成已被访问过的点
}
}
return;
}
private:
int n;
int visited[max_num];
dian a[max_num];
};
prim::prim()
{
n = 0;
for (int i = 0; i < max_num; i++)
{
visited[i] = 0;
a[i].f = 0;
a[i].N = 0;
a[i].z = 0;
}
}
void main(){
prim p;
p.creatgraph();
p.Prim();
return ;
}