分支限界法求解电路布线问题
Posted Kira~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分支限界法求解电路布线问题相关的知识,希望对你有一定的参考价值。
分支限界法求解电路布线问题
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int grid[11][9]=
-2,-2,-2,-2,-2,-2,-2,-2,-2,
-2,-1,-1,-1,-1,-2,-1,-1,-2,
-2,-1,-1,-2,-1,-1,-1,-1,-2,
-2,-1,-1,-2,-1,-2,-2,-1,-2,
-2,-1,-1,-2,-1,-1,-1,-1,-2,
-2,-1,-1,-1,-1,-1,-2,-1,-2,
-2,-1,-1,-1,-2,-2,-2,-1,-2,
-2,-1,-1,-1,-1,-1,-2,-1,-2,
-2,-1,-1,-1,-1,-1,-1,-1,-2,
-2,-1,-1,-2,-1,-2,-1,-1,-2,
-2,-2,-2,-2,-2,-2,-2,-2,-2
;
struct Position
int row;
int col;
;
int dir[4][2]= 0,1,1,0,0,-1,-1,0;
queue<Position> Q;
stack<Position> S;
int main()
int flag=0;
Position start,next,End;
start.row=3;
start.col=2;
grid[start.row][start.col]=0;
End.row=6;
End.col=7;
Q.push(start);
while(!Q.empty())
Position top=Q.front();
Q.pop();
if(top.col==End.col&&top.row==End.row)
flag=1;
break;
for(int i=0; i<4; i++)
if(grid[top.row+dir[i][0]][top.col+dir[i][1]]==-1)
next.row=top.row+dir[i][0];
next.col=top.col+dir[i][1];
grid[next.row][next.col]=grid[top.row][top.col]+1;
Q.push(next);
if(flag==1)
Position p[grid[End.row][End.col]];
int c=0;
next=End;
S.push(End);
while(!(next.row==start.row&&next.col==start.col))
for(int i=0; i<4; i++)
if(grid[next.row+dir[i][0]][next.col+dir[i][1]]==grid[next.row][next.col]-1)
next.row=next.row+dir[i][0];
next.col=next.col+dir[i][1];
p[c++]=next;
break;
cout<<"路线:"<<endl;
for(int i=c-1; i>=0; i--)
cout<<p[i].row<<" "<<p[i].col<<endl;
cout<<"电线长度最短为:"<<endl;
cout<<grid[End.row][End.col]<<endl;
else cout<<"no solution"<<endl;
return 0;
以上是关于分支限界法求解电路布线问题的主要内容,如果未能解决你的问题,请参考以下文章