分享
分享赚钱 收藏 举报 版权申诉 / 5

类型布线问题算法设计思想.doc

  • 上传人:cjc2202537
  • 文档编号:6545783
  • 上传时间:2019-04-16
  • 格式:DOC
  • 页数:5
  • 大小:39.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    布线问题算法设计思想.doc
    资源描述:

    1、6.6 布线问题算法设计思想:采用分支限界法求解。首先将问题转化为一颗解空间树:树根为线头,树高为线头到线尾的格数,每个节点有 4 个孩子,代表下一格可以朝 4 个方向。这样,布线问题就是搜索从树根到代表线尾节点的一条最短路径。分支限界法的本质是对解空间树的 BFS(广度优先)搜索,即每进一格就将状态入队,而后再依次将出队的每个状态的子状态入队,直到到达所求的状态节点即线尾。该问题的剪枝条件显而易见,即当遇到电路板上的封锁标记时进行剪枝。为了方便剪枝,算法开始进行了预处理,在电路板周围加上了一圈“围墙” (虚拟的封锁标记) ,使搜索路径时对边界的处理与对封锁标记的处理统一。因为该问题 BFS

    2、的队列中,并没有明显的优先级,所以该算法采用普通队列式。除了上述三点之外,程序对鲁棒性做了增强,对非法输入和文件错误进行了检测。程序设计代码: /*头文件 布线问题.h*/#ifndef KNAP_H#define KNAP_H#include #include #include using namespace std;class position /位置类public:int row; /行坐标int column; /列坐标bool operator=(const position elsereturn false;positionthis-column = b.column;return

    3、 *this;position operator+(const position temp.row = row + b.row;temp.column = column + b.column;return temp;class Wiring /布线类public:Wiring(char *in, char *out); /构造函数Wiring(); /析构函数void Solve(); /输出结果到文件protected:bool FindPath(); /找出布线方案void PrintPath(); /输出结果布线方案void PrintFail(); /输出没有路径信息private:i

    4、nt n, m; /电路板行列数int *grid; /电路板格子position start, finish; /起点和终点position *nextstep; /下一步四个方向ofstream fout; /输出结果文件;#endif/*函数实现文件 布线问题.cpp*/#include “布线问题.h“Wiring:Wiring(char *in, char *out) : fout(out)ifstream fin(in);if( !fin )cerr n m; /初始化电路板大小 n*mgrid = new int*n+2;for(int i = 0; i gridij;fin s

    5、tart.row start.column; /初始化起点和终点fin finish.row finish.column;fin.close();nextstep = new position4;nextstep0.row = 0; nextstep0.column = 1; /右nextstep1.row = 1; nextstep1.column = 0; /下nextstep2.row = 0; nextstep2.column = -1; /左nextstep3.row = -1; nextstep3.column = 0; /上if( !fout )cerr Queue; /辅助队列

    6、Queue.push_back(start); /初始位置是起点while(1)here = Queue.front(); /取队尾位置Queue.pop_front();for(int i = 0; i 0; i-) /找前趋位置gridhere.rowhere.column = -1; /表示在路径上for(int j = 0; j 4; j+)near = here + nextstepj;if(gridnear.rownear.column = i+1) /找到前趋break;here = near; /向前移动for(int i = 1; i = n; i+)int j;for(j = 1; j = m; j+)if(gridij = -1) /表示路径fout “*tt“;elsefout gridij “tt“;fout endl;void Wiring:PrintFail()fout “No Path!“ endl;/*主函数文件 test.cpp*/#include “布线问题.h“int main()char *in = “input.txt“; /输入文件char *out = “output.txt“; /输出文件Wiring wiring(in, out); /文件初始化线路板wiring.Solve(); /求解布线问题return 0;

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:布线问题算法设计思想.doc
    链接地址:https://www.docduoduo.com/p-6545783.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开