C++用分支限界法求解最短布线问题.doc
《C++用分支限界法求解最短布线问题.doc》由会员分享,可在线阅读,更多相关《C++用分支限界法求解最短布线问题.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC+用分支限界法求解最短布线问题C+用分支限界法求解最短布线问题实验六 用分支限界法求解最短布线问题学院: 计算机科学与技术 专业:计算机科学与技术学号: 班级: 姓名: (本程序在的环境下实现)一、实验内容:布线问题:印刷电路板将布线区域划分成nm个方格阵列,要求确定连接方格阵列中的方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿直线或直角布线,为了避
2、免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。实验要求:用分支限界法解此最短布线问题。分支限界法类似回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但分支限界法只找出满足约束条件的一个最优解,并且以广度优先或最小耗费优先的方式搜索解空间树T。树T是一棵子集树或排列树。在搜索时,每个结点只有一次机会成为扩展结点,并且一次性产生其所有儿子结点。从活结点表中选择下一扩展结点有两种方式:(1)队列式(FIFO) (2)优先队列式。分支限界法可广泛应用于单源最短路径问题,最大团问题,布线问题,电路板排列问题等。举例说明:一个77方格阵列布线如下:起始位置是a = (3,2
3、),目标位置是b = (4,6),阴影方格表示被封锁的方格。那么一条从a到b的最短布线方案如下图红色路径所示。a到b的最短距离是9。请思考:如何使得构造出的最短布线中的折角数量最少? a b 最短布线路径示例二、算法思想: 首先从点a出发向上下左右四个方向查找到点b的路径,并且每走一步便做增一标记,到达b点后,将路径长度赋给一个变量,依次递减路径长度,由b点往回查找得到路径。三、实验过程:#include#includeusing namespace std;struct Positionint row;int col;struct TEAMint x;int y;TEAM *next;Pos
4、ition start,end,path100;TEAM *team_l=NULL;int a100100;int m,n,path_len;void Output()int i,j;coutn-布线区域图-n;for(i=0;im+2;i+)for(j=0;jn+2;j+)coutsetw(2)aij;coutendl;cout-n;return;void Input_data()char yes;int x,y;coutmn;coutstart.rowstart.col;coutend.rowend.col;coutyes;while(yes=y)coutxy;if(xm+1 | yn+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 分支 限界 求解 布线 问题
限制150内