布线问题-分支限界法
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 印刷电路板不限区域划分成n*m个方格阵列。如下图所示 精确的电路布线问题要求确定连接方格a的中点,到连接方格b的中点的最短布线方案。 布线时,电路只能沿直线或直角布线。为了避免线路相交,已布的线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。 分支限界法的解决方案: 首先 , 从起始位置a开始,将它作为第一个扩展结点。与该节点相邻,并且可达的方格成为可行结点被加入到活节点队列中,并且将这些方格标记为1. 即从起始方格a到这些扩展方格距离为1. 然后 , 从活节点队列中取出队首结点作为下一个扩展结点,并将于当前扩展结点相邻且为未标记过的方格标记为2,并存入或节点队列。 最后 , 这个过程一直到算法搜索到目标方格b或活结点队列为空时截止。 实现方案: 初始定义position,私有变量row,col,显示方格 行 列。 grid[i][j]表示方格阵列的 0 : 开放, 1 :封锁。 2个方格相同,则不必计算,直接返回最小距离。 否则,设置方格围墙,初始化位移矩阵offset。 表示距离时,0,1已经使用,直接从2开始。因此所有距离最后都要减2. 算法描述 bool FindPath ( Position start ,