• 大小: 1.55 KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-08-11
  • 语言: 其他
  • 标签: PRIM  

资源简介

PRIM算法,求最小生成树问题。PRIM算法,求最小生成树问题

资源截图

代码片段和文件信息

#include
#include//Sleep()函数头文件
#define maxnum 100000
struct node{
node *rt*next;
int data;
int point;
int qz;//表示权值
};
typedef node array[1000];//候选边数组
typedef bool selectedpoint[1000];//记录结点是否被选择过

class graph
{
public:
graph(){t=NULL;}
void creat(node *&tint &n);
node *t;
};

void graph::creat(node *&tint &n)//邻接表法,建图
{
int x;
cin>>x;
if(x==0)
t=NULL;
else
{   
t=new node;
t->data=x;
n++;
t->rt=NULL;
node *b=t;
int y;
cin>>y;
while(y!=0)
{   int z;
    cin>>z;//z表示权值
node *c=new node;
    c->data=y;
c->qz=z;
b->rt=c;
b=c;
b->rt=NULL;
cin>>y;
}
creat(t->nextn);

}
}


int firstadj(graph gint i)
{
node *a=g.t;
while(a->data!=i)
a=a->next;
if(a->rt!=NULL)
return a->rt->data;
else return 0;
}
int nextadj(graph gint iint w)
{
if(w==0)
return 0;
else
{
node *a=g.t;
    while(a->data!=i)
a=a->next;
while(a->data!=w)
a=a->rt;
if(a->rt!=NULL)
return a->rt->data;
else
return 0;
}
}
int get_quanzhi(graph gint vint i)//返回结点v到结点i的权值
{   int e=v;
    node *r=g.t;
while(r->data!=v)
r=r->next;
int w=firstadj(ge);
while(w!=0)
{
if(w==i)
return r->rt->qz;
else
{
w=nextadj(gew);
r=r->rt;
}
}
return maxnum;
}
void initial_minedges(graph &garray &minedgesint vint nselectedpoint &selected)//初始化候选边数组
{
int w;
int e=v;
cout<<“现在已选结点有:“< Sleep(1000);
selected[e]=true;
w=firstadj(ge);
while(w!=0)
{     
minedges[w].point=e;
minedges[w].qz=get_quanzhi(gew);
Sleep(500);
cout<<“结点“< w=nextadj(gew);
}

}
int get_minedges(graph &garray &minedgesint nselectedpoint &selected)//在候选边数组中找到权值最短的一个邻接点
{
int mminjk;
mmin=maxnum;
for(j=1;j<=n;j++)
if(!selected[j] && minedges[j].qz {
k=j;
mmin=minedges[j].qz;
}
cout<<“所以应该选择的结点为“< return k;

}
void adjust(graph &garray &minedgesint kint nselectedpoint &selected)//调整候选边数组
{
int j;
int w=firstadj(gk);
selected[k]=true;
cout<<“现在已选结点有:“;
for(int qq=1;qq<=n;qq++)
if(selected[qq])
cout< cout< cout<<“现在的可选边有:“< Sleep(300);
for(int x=1;x<=n;x++)
{
if(selected[x])
{
int w1=firstadj(gx);
while(w1!=0)
{
if(!selected[w1])
cout<<“结点“< Sleep(300);
w1=nextadj(gxw1);
}
}
}
while(w!=0)
{
if(selected[w])
{   
cout<<“结点“< w=nextadj(gkw);

}
else
{
for(j=1;j<=n;j++)
if(w==j && get_quanzhi(gkj) {   
minedges[j].qz=get_quanzhi(gkj);
minedges[j].point=k;
}
w=nextadj(gkw);
}
}

}
void prim(graph &gint eint nselectedpoint &selected)
{   
arra

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3848  2008-06-24 22:12  PRIM.cpp

----------- ---------  ---------- -----  ----

                 3848                    1


评论

共有 条评论