实验二电路布线问题.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二电路布线问题 班级:计算机1405组别:4 班级: 计算机1405 组别:4 姓名:刘诚阳 学号问题定义及需求分析 1?1课题目的和任务 问题描述: 印刷电路板将布线区域划分为nXn个方格阵列。在布线时,电路只 能沿直线或直角布线。为避免线路相交,已布线的方格要做封锁标记。 设起始位置为终止位置为b,求解电路布线问题。 实验要求: 设计印刷电路板的布线模拟程序。 1) 采用栈或队列等数据结构。 2) 采用穷举法的回溯搜索,求3到b可能的布线线路。 3) 推荐采用层次优先搜索,求3到b最优的布线线路。 1?2数据形式 输入数据形式:通过生成随机数的函数随机生成一个矩阵。 输入值的范围:生成的矩阵中的数值为int型,为0或者1,其中0表 示死路,1表示通路。 输出数据形式:输出到显示器。 1?3程序功能 随机给定一个线路分布矩阵,利用穷举法,通过栈的应用,求出从 a到b的可能布线线路;采用层次优先搜索,通过队列的应用,求岀a 到b的最优布线线路。 1?4测试数据 测试数据为随机生成的矩阵。 概要设计 1抽象数据类型 需要定义一个位置类型的数据,里面包含int型的x和y坐标,用来 记录位置信息;再定义一个SWire的通道块数据类型,里面包含该通 道块的位置数据,在路径上的序号和方向信息;另外述需要构建栈和 队列的基本结构类型。 2主程序流程及各模块之间的调用关系 详细设计 1存储结构实现 typedef struct {//位置 int x; int y; }Positi on; typedef struct {//移动标记 int ord; Position seat; int di; }SWire; typedef struct {//栈 SWire* base; SWire* top; int stacksize; }Stack; typedef struct QNode{〃队歹!J Position data; struct QNode* next; JQNode/QP; typedef struct{ QP fron; QP rear; JLinkQ; 2负责模块的伪码算法 (1) int WirePath(int** Board,Position start,Position finish) { //寻找路径算法 //若有从电路板的入I」start到出口 end的通道,则求得一条存放在栈中 // (从栈底到栈顶) InitStack(S); curpos=start;//设定当前位置为入口位置 curstep 二 1;//探索第一步 do{ 辻(Pass(S, curpos)) {//当前位置可通过,即是未曾走到的通道块 Footprint (curpos) ;//留下足迹 e= (curstep, curpos, 1); Push(S, e); 〃加入路径 if (curpos二二finish) {//到达出口 (终点) PrintStack(S);〃输岀路径 Printf (电路板的搜寻图) } retur n 1;//返冋 } NcxtPos (curpos, 1) ;//下一位置是当而位置的东邻 curstep++; //探索-卜-一步 } else {//当前位置不能通过 Pop(S, e); if (S. top!=S. base) {//栈空 while(e? di==5S.top!=S? base) { MarkPrint (e.seat); Pop(S, e) ;//留下不能通过的标记,并退冋一步 } } 辻(e. di5) { e. di++; Push(S, e) ;//换下一个方向探索 NextPos(e. seat, e. di);〃设定当前位置是该新方向 //上的相邻块 curpos. x=e. seat, x; curpos. y二c. scat, y; } } }while(S. base!二S. top); printf (没有通路); printf(电路板的搜寻图); return 0; } (2) int FindShortWay(int** Board, Position start, Position finish){ 〃搜寻最短布线路径算法 if (finish==start) {//到达终点,结束 MShortPath=0; return 1; } curpos二st art;//标记当前位置 if (Board[start, x] [start. y]==0) {没有通路! return 0;} Board [start, x] [start. y]=2;//有通路,则令其值为 2 while仃){//将笫一个通道块赋值2,并将其相邻通道块从右开

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档