1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 电路布线问题(迷宫问题)

电路布线问题(迷宫问题)

时间:2020-01-25 22:48:52

相关推荐

电路布线问题(迷宫问题)

算法思想:

1.用深度优先搜索的方法解决布线问题

2.从起始位置a开始将它作为第一个搜索方格

3.依次从与该方程相邻并且可达到的方格中选择一个方程成为下一个搜索的方格,并将此方格作为封锁标记后加入到一个栈path中,继续深度搜索

4.一旦不能继续搜索,算法从栈中Path中取出栈顶元素,继续搜索下一个相邻方格,重复上述操作直到找到目标方格

5.找到目标方格之后进行往回找路径。

以下就是电路布线问题的伪代码:

bool find_path(Point start,Point finish,int plen,Point *&path){//判断是否已经达到目标位置了if(start.row==finish.row&&start.col==finish.col){//开始的行和列等于结束的行和列plen=0; //长度就为0return;}for(int i=0;i<=n+1,i++){ //设置边界grid[i][0]=grid[i][n+1]=1; //左右边界grid[0][i]=grid[n+1][i]=1; //上下边界}Point offset[4]; //设置移动上下左右offset[0].row=0; offset[0].col=1; //右offset[1].row=1; offset[1].col=0; //下offset[2].row=0; offset[2].col=-1; //左 offset[3].row=-1; offset[3].col=0; //上Point here,nbr;here.row=start.row;here.col=start.col;grid[here.row][here.col]=2; //标记可达到的位置queue<Point>que; //设置一个队列do{//开始寻找目标方格for(int i=0;i<4;i++){nbr.row=here.row+offset[i].row;nbr.col=here.col+offset[i].col;if(grid[nbr.row][nbr.col]==0){ //未被标记grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;if(nbr.row==finish.row&&nbr.col==finish.col) //找到目标方格break;que.push(nbr);}}if(nbr.row==finish.row&&nbr.col==finish.col) //找到目标方格break;if(que.empty()) //找不到目标方格return false;here=que.top();que.pop();}while(true);// 找到目标点就构造最短路径plen=grid[finish.row][finish.col]-2;here=finish;Path=new Point[plen]; //用来存从最后的位置回到最初位置的最短路径for(int j=plen-1;j>=0;j--){Path=here;for(int i=0;i<4;i++){nbr.row=here.row+offset[i].row;nbr.col=here.col+offset[i].col;if(grid[nbr.row][nbr.col]==j+2) //找到符合的路径break;}here=nbr; //向前移动}return true;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。