c++的prim算法 没错误 但是运行不出来

姑gggggggg 2013-05-28 10:27:57
//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];

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];


};

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 ;
}
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaode01 2013-06-02
  • 打赏
  • 举报
回复
for(i=1;i<=n;i++){//i应该从2开始,你的minedge[1][1]=0 if(visited[i]==false&&minedge[v][i]<min) min=minedge[v][i];}
macfan 2013-05-28
  • 打赏
  • 举报
回复

    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;}
            cout<<a[i].z<<" "<<a[i].f<<" "<<a[i].N<<endl;}
 
        return;
    }
你求最小生成树,我怎么没看见你有求和的表达式?结果也打算输出矩阵?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧