网站开发程序是什么建立免费空间网站
news/
2025/9/22 20:37:58/
文章来源:
网站开发程序是什么,建立免费空间网站,千万不要注册公司,php网站模板修改印刷电路板将布线区域划分成nm个方格如图a所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时#xff0c;电路只能沿直线或直角布线#xff0c;如图b所示。为了避免线路相交#xff0c;已布了线的方格做了封锁标记#xff0c;其它线路…印刷电路板将布线区域划分成n×m个方格如图a所示。精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时电路只能沿直线或直角布线如图b所示。为了避免线路相交已布了线的方格做了封锁标记其它线路不允穿过被封锁的方格。
一个布线的例子图中包含障碍。起始点为a目标点为b。
算法思想
解此问题的队列式分支限界法从起始位置a开始将它作为第一个扩展结点。与该扩展结点相邻并且可达的方格成为可行结点被加入到活结点队列中并且将这些方格标记为1即从起始方格a到这些方格的距离为1。
接着算法从活结点队列中取出队首结点作为下一个扩展结点并将与当前扩展结点相邻且未标记过的方格标记为2并存入活结点队列。这个过程一直继续到算法搜索到目标方格b或活结点队列为空时为止。即加入剪枝的广度优先搜索 使用的c普通队列解决问题
#includeiostream
using namespace std;
#includequeue
#includebits/stdc.h
class Position{public:int row;//行 int col;//列
};
const int m7;//列数
const int n7;
int gird[n2][m2];
bool FindPath(Position start,Position finish,int PathLen,Position *path)
{if((start.col finish.col)(start.row finish.row ))//起点和终点是同一个点时 {PathLen 0;return true;}//初始化相对位移Position offset[4];//右 offset[0].col 0;offset[0].row 1; //下offset[1].col 1;offset[1].row 0;//左offset[2].col 0;offset[2].row -1;//上 offset[3].col -1;offset[3].row 0;int NumofNbrs 4;Position here,nbr;//nbr为扩展节点 here.col start.col ;//here为每次移动的中心位置点 here.row start.row ;//标记可达方格的位置gird[start.col][start.row]1;queuePosition Q;do{for(int i0;iNumofNbrs;i){nbr.col here.col offset[i].col;nbr.row here.row offset[i].row;if(gird[nbr.col][nbr.row] 0)//该位置还未被标记 {gird[nbr.col][nbr.row] gird[here.col][here.row]1;if((nbr.col finish.col )(nbr.row finish.row)){break;//退出for循环 }Q.push(nbr);} }//判断是否到达了目标位置finish if((nbr.col finish.col )(nbr.row finish.row)){break;//退出while循环 }if(Q.empty()){return false;//此时无解 }hereQ.front();Q.pop();} while(true);PathLen gird[finish.col][finish.row]-1;path new Position[PathLen];here finish;for(int jPathLen-1;j0;j--){path[j]here;//找到前驱节点for(int i0;iNumofNbrs;i){nbr.col here.col offset[i].col;nbr.row here.row offset[i].row;if(gird[nbr.col][nbr.row]j1){break;}}here nbr; }return true;}
int main()
{int PathLen;Position start,finish,*path;start.col3;start.row2;finish.col4;finish.row6;cout布线的起点start.col,start.rowendl;cout布线的终点finish.col,finish.rowendl;//设置方格阵列“围墙”for(int i0;im1;i){gird[0][i]gird[m1][i]-1;} //设置方格行“围墙”for(int i0;in1;i){gird[i][0]gird[i][n1]-1;} gird[1][3]-1;gird[2][3]-1;gird[2][4]-1;gird[3][5]-1;gird[4][4]-1;gird[4][5]-1;gird[5][1]-1;gird[5][5]-1;gird[6][1]-1;gird[6][2]-1;gird[6][3]-1;gird[7][1]-1;gird[7][2]-1;gird[7][3]-1;cout布线方格阵如下(0表示允许布线-1表示不允许布线)endl;for(int i0;im1;i){for(int j0;jn1;j){coutsetw(2)gird[i][j] ;}coutendl;} FindPath(start,finish,PathLen,path);cout布线后方格阵如下(0表示允许布线-1表示不允许布线)endl;for(int i0;im1;i){for(int j0;jn1;j){coutsetw(2)gird[i][j] ;}coutendl;} cout布线长度为PathLenendl;cout布线路径如下endl;for(int i0;iPathLen;i){cout(path[i].col,path[i].row)→;} return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910294.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!