布线问题—分支限界—java实现

本文介绍了如何使用分支限界算法解决布线问题。详细阐述了问题描述,算法思想,并提供了Position类的设计,移动方向相对位移的定义,以及分支限界算法的核心代码,附带完整代码示例和运行输出。
摘要由CSDN通过智能技术生成

问题描述

印刷电路板将布线区域划分成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[
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值