分支限界法求解电路布线问题

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;

以上是关于分支限界法求解电路布线问题的主要内容,如果未能解决你的问题,请参考以下文章

分支限界法—单源最短路径问题

分支限界法

五大常用算法:分支限界法

分支限界法

分支界限

python实现分支限界算法的案例