问题描述
印刷电路板将布线区域划分成m×n个方格阵列,精确的电路布线问题要求确定连接方格a的中点到方格b中点的最短布线方案。
在布线时,电路只能沿直线或直角布线。
———————
算法思想
1、解决此问题的队列式分支限界法从起始位置a(起始为2)开始将它作为第一个扩展结点。
2、与该扩展结点相邻并且可达的方格成为可行结点并加入到活结点队列中,并且将这些方格标记为3,
即从起始方格a到这些方格的距离为3-2 = 1
3、接着,算法从活结点队列中取出队首结点作为下一个扩展结点,并将与当前扩展结点相邻且从未被
标记过的方格标记为4,并存入活结点队列。
4、这个过程一直持续到算法搜索到目标方格b或活结点队列为空为止。即加入剪枝的广度优先搜索。
设计
【Position类设计】
class Position{
private int row;
private int col;
public int getRow() {
return row;
}
public void setRow(int row) {
this.row = row;
}
public int getCol() {
return col;
}
public void setCol(int col) {
this.col = col;
}
public Position(int row, int col) {
super();
this.row = row;
this.col = col;
}
public Position() {
super();
}
//这里实现了一下拷贝构造函数,目的是为了更容易为对象赋值
public Position(Position position) {
this.row = position.row;
this.col = position.col;
}
//这里重写toString函数,便于输出解的形式
@Override
public String toString() {
return "(" + row + ", " + col + ")";
}
}
【定义移动方向的相对位移】
public static void setPos() {
//右
offset[0] = new Position(0,1);
//下
offset[1] = new Position(1,0);
//左
offset[