6-9 布线问题

问题描述

假设要将一组元件安装在一块线路板上,为此需要设计一个线路板布线方案。各元件的连线数由连线矩阵 conn 给出。元件 i 和元件 j 之间的连线数为 conn(i,j)。如果将元件 i 安装 在线路板上位置 r 处,而将元件 j 安装在线路板上位置 s 处,则元件 i 和元件 j 之间的距离 为 dist(r,s)。确定了所给的 n 个元件的安装位置,就确定了一个布线方案。与此布线方案相应的布线成本为∑1≤i<j≤nconn(i,j)∗dist(r,s)∑1≤i<j≤nconn(i,j)∗dist(r,s)\sum\limits_{1\leq i 。试设计一个优先队列式分支限界法,找出所给n 个元件的布线成本最小的布线方案。

对于给定的 n 个元件,设计一个优先队列式分支限界法,计算最佳布线方案,使布线费 用达到最小。

数据输入:
第一行有 1 个正整数 n (1≤n≤20)。接下来的 n-1 行, 每行 n-i 个数,表示元件 i 和元件 j 之间连线数,1≤ i< j≤ 20。


Java

package Chapter6FenZhiXianJieFa;import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;public class BuXian {private static class BoardNode implements Comparable{int s,cd;int[] x;public int compareTo(Object o){BoardNode boardNode = (BoardNode) o;int result = Integer.compare(cd, boardNode.cd);return result;}private int len(int[][] conn, int ii){int sum = 0;for(int i=1; i<=ii; i++)for(int j=i+1; j<=ii; j++){int dist = x[i]>x[j]?x[i]-x[j]:x[j]-x[i];sum += conn[i][j]*dist;}return sum;}}private static int MAX = 100000;private static int n;private static int[] p;private static int[][] B;public static void main(String[] args){Scanner input = new Scanner(System.in);while (true){n = input.nextInt();p = new int[n+1];B = new int[n+1][n+1];for(int i=1; i<=n-1; i++)for(int j=i+1; j<=n; j++)B[i][j] = input.nextInt();System.out.println(BBArrangeBoards(B,n));for(int i=1; i<=n; i++)System.out.print(p[i]+" ");}}private static int BBArrangeBoards(int[][] conn, int n){Queue<BoardNode> H = new PriorityQueue<>();BoardNode E = new BoardNode();E.x = new int[n+1];E.s=0; E.cd=0;for(int i=1; i<=n; i++) E.x[i]=i;int bestd = MAX;while (E.cd < bestd){if(E.s == n-1){int ld = E.len(conn,n);if(ld < bestd){p=E.x; bestd=ld;}}else{for(int i=E.s+1; i<=n; i++){BoardNode N = new BoardNode();N.x = new int[n+1];N.s = E.s+1;for(int j=1; j<=n; j++) N.x[j] = E.x[j];N.x[N.s] = E.x[i];N.x[i] = E.x[N.s];N.cd = N.len(conn, N.s);if(N.cd < bestd) H.add(N);}}if(H.isEmpty()) return bestd;else E = H.poll();}return bestd;}
}

Input & Output

3
2 3
3
10
1 3 2 9
18 1 10 18 10 14 8 4
17 8 10 16 5 12 2
11 0 7 14 19 16
6 17 2 18 18
6 0 8 9
7 11 14
13 6
17
964
2 3 8 5 1 4 9 6 7 9
2 6 5 10 4 19 0 0
6 19 7 12 5 1 18
12 8 14 0 10 13
1 5 18 5 14
7 4 17 7
13 3 7
18 14
5
804
1 9 6 8 2 5 4 3 7 

Reference

王晓东《计算机算法设计与分析》(第3版)P228

算法设计与分析: 6-9 布线问题相关推荐

  1. 算法设计与分析: 5-16 布线问题

    5-16 布线问题 问题描述 假设要将一组元件安装在一块线路板上,为此需要设计一个线路板布线方案.各元件的连线数由连线矩阵 conn 给出.元件 i 和元件 j 之间的连线数为conn(i,j)con ...

  2. 算法设计与分析课程的时间空间复杂度

    算法设计与分析课程的时间空间复杂度: 总结 算法 时间复杂度 空间复杂度 说明 Hanoi $ O(2^n) $ $ O(n) $ 递归使用 会场安排问题 \(O(nlogn)\) \(O(n)\) ...

  3. 计算机算法设计与分析教学大纲,《算法设计与分析》教学大纲

    <<算法设计与分析>教学大纲>由会员分享,可在线阅读,更多相关<<算法设计与分析>教学大纲(3页珍藏版)>请在人人文库网上搜索. 1.课程编号:&quo ...

  4. 计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)

    计算机算法设计与分析(第4版) 目录 1 算法概述 2 递归与分治策略 3 动态规划 4 贪心算法 5 回溯法 6 分支限界法 7 随机化算法 8 线性规划与网络流 算法概述 复杂性分析 NP-完全性 ...

  5. 算法设计与分析(第4版)

    算法设计与分析(第4版) 算法引论 算法与程序 算法:解决问题的方法或过程 输入 输出 确定性 有限性 程序:算法用某种程序设计语言的具体实现 表达算法的抽象机制 高级程序设计语言 抽象数据类型 描述 ...

  6. 算法设计与分析复习笔记(上)

    简介:本文是博主在复习算法设计与分析的笔记,参考了北大算法设计与分析以及王晓东编著的<计算机算法设计与分析>第四版相关内容,如有错误,欢迎指正. 文章目录 设计技术 分治 动态规划 设计技 ...

  7. 计算机算法设计与分析期末试题,算法设计与分析期末考试试卷(D卷)(含答案).doc...

    算法设计与分析期末考试试卷(D卷) 一.选择题(0分,每题分) .D A.n2/2 + 2n的渐进表达式上界函数是O(2n) B.n2/2 + 2n的渐进表达式下界函数是Ω(2n) C.logn3的渐 ...

  8. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  9. PHP第五周答案,算法设计与分析第五周作业——Word Ladder

    算法设计与分析第五周作业--Word Ladder 上周找了一道深度搜索优先搜索的算法题来做,于是这周就选了一道广度优先搜索算法题来试试手. 本周所选题目:原题目链接 题目详情 题目大意:给出一个字符 ...

最新文章

  1. ORB-SLAM2地图存储加载系统
  2. Comparable接口与Comparator接口
  3. Leet Code OJ 338. Counting Bits [Difficulty: Medium]
  4. 问题步骤记录器——“懒教师”的好帮手
  5. php点加等于0,php 做数学运算时结果为0的原因
  6. 新概念英语第三册01-20课(转)
  7. ShardingSphere(七) 读写分离配置,实现分库读写操作
  8. MySQL group-by-modifiers
  9. 30美元攻陷Intel SGX enclave,Intel 不打算修复
  10. break、continue
  11. 2021-03-05 网站资源数据搜集
  12. USB Server应用于RPA机器人案例分析
  13. 腾讯互娱AMS | 我的打包我做主——浅析前端构建
  14. 来客在线客服系统源码 支持一键安装
  15. python怎么打开h5文件_python怎么查看h5文件-问答-阿里云开发者社区-阿里云
  16. 【看表情包学Linux】缓冲区的概念 | Git 三板斧 | 实现简易进度条
  17. 嵌入式 - 瑞萨宣讲
  18. java持久化框架_众里寻他千百度-- 轻量级持久化框架-java-火龙果软件工程
  19. 有哪些比较好的pdf阅读器?思路提供
  20. 用python整个活(2)——用numpy做一个蜘蛛纸牌

热门文章

  1. 推荐1款免费在线OCR文字识别服务,识别特别准确!
  2. julia换源(更换国内镜像站)
  3. 你到底能用Python做什么?下面是Python的三个主要应用程序。
  4. DBus daemon 启动(三)
  5. 【转】Subsonic的添加和更新、删除操作
  6. Cadence OrCAD 16.6 原理图导出带标签pdf(免费软件版)
  7. 中兴ZXA10-F460 v3.0获取超级管理员密码
  8. 解决联想电脑windows7系统开机提示DHCP自检,然后按下esc键提示Error1962No operating system found.Press any key to repeat boot
  9. 金蝶k3服务器老是自动重新启动,金蝶K3:常见问题分析及解决方法
  10. 数据库--商品 表的设计