資源簡介
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
- 上一篇:文件夾變exe病毒專殺工具免費版.rar
- 下一篇:socket客戶端源碼
評論
共有 條評論