声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2841|回复: 4

[经典算法] [分享]基于启发式的度约束最小生成树的算法研究

[复制链接]
发表于 2006-4-20 21:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
如题,我正在做毕设,课题是:基于启发式的度约束最小生成树的算法研究,倘若哪位仁兄见到过c/c++的源代码,请帮帮忙。谢了先~~~[em05]
[此贴子已经被风花雪月于2006-5-15 10:26:27编辑过]

回复
分享到:

使用道具 举报

发表于 2006-4-22 21:38 | 显示全部楼层
最小生成树 我知道。有什么prim 算法等。但那时给予网络拓扑数据的。我不晓得你这个和那个有什么关系。
发表于 2006-5-15 10:30 | 显示全部楼层

回复:(sll1223)[分享]基于启发式的度约束最小生成树...

最小生成树prim算法<BR><BR>const   int  CNST_NumGrphNodes  =   101 ;<BR> // 最小生成树元素 <BR>  struct  TTreeEdge   {<BR>     int  v1, v2; <BR>     double  w;<BR>} ;<BR> // 候选集元素 <BR>  struct  TCloseRec   {<BR>     double  lowCost;<BR>     int  vec;<BR>} ;<BR> int  MST_prim( int  g[][CNST_NumGrphNodes],  int  n, TTreeEdge  * minTree)   {<BR>     int  i, j, k;<BR>    TCloseRec  * close  =   new  TCloseRec[n];    <BR>     for  (i = 1 ; i &lt; n; i ++ )   {<BR>        close.vec  =   0 ;<BR>        close.lowCost  =  g[ 0 ];<BR>    } <BR>    close[ 0 ].lowCost  =   - 1 ;<BR>     for  (i = 0 ; i &lt; n - 1 ; i ++ )   {<BR>         // 找图点 <BR>           for  (k = 1 ; k &lt; n; k ++ )   {<BR>             if  (close[k].lowCost  !=   - 1 )   {<BR>                 break ;<BR>            } <BR>        } <BR>          for  (j = k + 1 ; j &lt; n; j ++ )   {<BR>             if  (close[j].lowCost  !=   - 1 )   {<BR>                 if  (close[j].lowCost  &lt;  close[k].lowCost)   {<BR>                    k  =  j;<BR>                } <BR>            } <BR>        } <BR>         // 加入树中 <BR>         minTree.v1  =  k;<BR>        minTree.v2  =  close[k].vec;<BR>        minTree.w  =  close[k].lowCost;<BR>        close[k].lowCost  =   - 1 ;<BR>         // 调整候选集 <BR>           for  (j = 1 ; j &lt; n; j ++ )   {<BR>             if  (close[j].lowCost  &gt;  g[j][k])   {<BR>                close[j].lowCost  =  g[j][k];<BR>                close[j].vec  =  k;<BR>            } <BR>        } <BR>    } <BR>    delete []close;<BR>     return   0 ;<BR>}
发表于 2006-5-15 10:30 | 显示全部楼层

回复:(sll1223)[分享]基于启发式的度约束最小生成树...

另一个程序<BR><BR>#include<IOSTREAM.H><BR>#include<CONIO.H><BR>#include"graph.h"<BR>const int MAX_VERTEX_NUM=100;<BR>typedef char VertexType;<BR>typedef int ARType;<BR>typedef struct<BR>{<BR>VertexType adjvex;//定义顶点的类型;<BR>ARTypelowcost;//定义该边上的权;<BR>}minside[MAX_VERTEX_NUM];//村顶点和权<BR><BR>int Locatevex(Graph G,VertexType u)<BR>{//为U的顶点在邻接矩阵表示中的数组的下标<BR>for(int n=1;n&lt;=G.vexnum;n++)<BR>{<BR>if(u==G.vex[n])<BR>return n;<BR>}<BR>return -1;<BR>}<BR>int minimum(minside SZ,Graph G)<BR>{<BR>int i=1,j,k,min;<BR>while(!SZ.lowcost) ++i;<BR>min=SZ.lowcost;<BR>k=i;<BR>for(j=i+1;j&lt;=G.vexnum;j++)<BR>{<BR>if(SZ[j].lowcost&gt;0)<BR>{<BR>if(min&gt;SZ[j].lowcost)<BR>{<BR>min=SZ[j].lowcost;k=j;<BR>}<BR>}<BR>}<BR>return k;<BR>}<BR>void MiniSpanTree_PRIM(Graph G,VertexType u)//用普里姆算法从第u个顶点出发构造<B >最小生成树</B>T,输出T的各边。<BR>{<BR>int i,j,k;<BR>minside closedge;<BR>k=Locatevex(G,u);<BR>for(j=1;j&lt;=G.vexnum;j++)<BR>{//closedge数组初始化<BR>if(j!=k)<BR>{closedge[j].adjvex=u;closedge[j].lowcost=G.arcs[k][j];}<BR>}<BR>closedge[k].lowcost=0;<BR>cout&lt;&lt;"最小代价生成树的各边:"&lt;<ENDL;<BR> for(i=2;i&lt;=G.vexnum;i++)<BR>{<BR>k=minimum(closedge,G);<BR>cout&lt;&lt;"("&lt;<CLOSEDGE[K].ADJVEX<<"_"<<G.VEX[K]<<")";<BR> closedge[k].lowcost=0;<BR>for(int m=1;m&lt;=G.vexnum;++m)<BR>{<BR>if(G.arcs[k][m]<CLOSEDGE[M].LOWCOST)<BR> {closedge[m].adjvex=G.vex[k];closedge[m].lowcost=G.arcs[k][m];}<BR>}<BR>}<BR>}<BR>int main()<BR>{<BR>Graph p;<BR>VertexType u='a'; <BR>int n,e;<BR>cout&lt;&lt;"以邻接矩阵存储图的相关操作"&lt;<ENDL;<BR> cout&lt;&lt;"顶点数:";<BR>cin&gt;&gt;n;<BR>cout&lt;&lt;"边数:";<BR>cin&gt;&gt;e;<BR>Creat(p,n,e);<BR>cout&lt;&lt;"打印邻接矩阵:"&lt;<ENDL;<BR> print(p);<BR>MiniSpanTree_PRIM(p,u);<BR>return 1;<BR>getch();<BR>}<BR>
发表于 2006-5-15 10:31 | 显示全部楼层

回复:(sll1223)[分享]基于启发式的度约束最小生成树...

你还可以参考<a href="http://course.cug.edu.cn/cugFirst/discrete_mathe/netClass/tree/contents/06-02-guid.htm" target="_blank" >http://course.cug.edu.cn/cugFirst/discrete_mathe/netClass/tree/contents/06-02-guid.htm</A>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 22:43 , Processed in 0.055536 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表