实验二 电路布线问题.docx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二电路布线问题要点

实验二 电路布线问题 班级:计算机1405 组别:4 姓名:刘诚阳 学号问题定义及需求分析 1.1课题目的和任务 问题描述: 印刷电路板将布线区域划分为n╳n个方格阵列。在布线时,电路只能沿直线或直角布线。为避免线路相交,已布线的方格要做封锁标记。设起始位置为a,终止位置为b,求解电路布线问题。 实验要求: 设计印刷电路板的布线模拟程序。 1)采用栈或队列等数据结构。 2)采用穷举法的回溯搜索,求a到b可能的布线线路。 3)推荐采用层次优先搜索,求a到b最优的布线线路。 1.2数据形式 输入数据形式:通过生成随机数的函数随机生成一个矩阵。 输入值的范围:生成的矩阵中的数值为int型,为0或者1,其中0表示死路,1表示通路。 输出数据形式:输出到显示器。 1.3程序功能 随机给定一个线路分布矩阵,利用穷举法,通过栈的应用,求出从a到b的可能布线线路;采用层次???先搜索,通过队列的应用,求出a到b的最优布线线路。 1.4测试数据 测试数据为随机生成的矩阵。 概要设计 2.1抽象数据类型 需要定义一个位置类型的数据,里面包含int型的x和y坐标,用来记录位置信息;再定义一个SWire的通道块数据类型,里面包含该通道块的位置数据,在路径上的序号和方向信息;另外还需要构建栈和队列的基本结构类型。 2.2主程序流程及各模块之间的调用关系 详细设计 3.1存储结构实现 typedef struct{//位置 int x; int y; }Position; typedef struct{//移动标记 int ord; Position seat; int di; }SWire; typedef struct{//栈 SWire* base; SWire* top; int stacksize; }Stack; typedef struct QNode{//队列 Position data; struct QNode* next; }QNode,*QP; typedef struct{ QP fron; QP rear; }LinkQ; 3.2负责模块的伪码算法 (1)int WirePath(int** Board,Position start,Position finish){ //寻找路径算法 //若有从电路板的入口start到出口end的通道,则求得一条存放在栈中 //(从栈底到栈顶) InitStack(S); curpos=start;//设定当前位置为入口位置 curstep=1;//探索第一步 do{ if(Pass(S,curpos)){//当前位置可通过,即是未曾走到的通道块 FootPrint(curpos);//留下足迹 e=(curstep,curpos,1); Push(S,e);//加入路径 if(curpos==finish){//到达出口(终点) PrintStack(S);//输出路径 Printf(电路板的搜寻图) } return 1;//返回 } NextPos(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);//留下不能通过的标记,并退回一步 } } if(e.di5){ e.di++; Push(S,e); //换下一个方向探索 NextPos(e.seat,e.di);//设定当前位置是该新方向 //上的相邻块 curpos.x=e.seat

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档