5-16 布线问题


问题描述

假设要将一组元件安装在一块线路板上,为此需要设计一个线路板布线方案。各元件的连线数由连线矩阵 conn 给出。元件 i 和元件 j 之间的连线数为conn(i,j)conn(i,j) conn(i,j)。如果将元件 i 安装 在线路板上位置 r 处,而将元件 j 安装在线路板上位置 s 处,则元件 i 和元件 j 之间的距离 为 dist(r,s)dist(r,s)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\leq j\leq n}conn(i,j)*dist(r,s)。试设计一个算法找出所给 n 个元件的布线成本最小的布线方案。

设计一个算法,对于给定的 n 个元件,计算最佳布线方案,使布线费用达到最小。

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

Java

package Chapter5HuiSuFa;import java.util.Scanner;public class BuXian {private static int n;private static int[][] conn;private static int[] x,bestx;private static int bestd;private static int MAX = 100000;public static void main(String[] args){Scanner input = new Scanner(System.in);while (true){bestd = MAX;n = input.nextInt();x = new int[n+1];bestx = new int[n+1];conn = new int[n+1][n+1];for(int i=1; i<=n; i++)for(int j=i+1; j<=n; j++)conn[i][j] = input.nextInt();for(int i=1; i<=n; i++)x[i] = i;backtrack(1);System.out.println(bestd);for(int i=1; i<=n; i++)System.out.print(bestx[i]+" ");}}private static void backtrack(int t){if(t == n){int tmp = len(t);if(tmp < bestd){bestd = tmp;for(int j=1; j<=n; j++)bestx[j] = x[j];}}elsefor (int j=t; j<=n; j++){swap(x,t,j);backtrack(t+1);swap(x,t,j);}}private static int len(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 void swap(int[] x, int i, int j){int tmp;tmp = x[i];x[i] = x[j];x[j] = tmp;}
}

Input & Output

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

Reference

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

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

  1. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  2. 算法设计与分析: 6-9 布线问题

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

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

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

  4. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

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

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

  6. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  7. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

  8. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

  9. 算法设计与分析(python版)-作业一

    参考教材:算法设计与分析(Python版)         作者:王秋芬 1 . 容易 (4分)2 n=O(100n ^2) 错误 2 . 容易 (3分)10=θ(log10) 正确 3 . 容易 ( ...

最新文章

  1. Error:java: 无效的源发行版: 11
  2. poj pku 2528 线段树的基础应用
  3. Python fabric实践操作
  4. 数据库中字段随机添加汉字
  5. bzoj2242 [SDOI2011]计算器 exgcd+ksm+bsgs
  6. 一个操作系统的实现01
  7. vscode 5500 but failed to open in Browser Preview. Got Browser Preview extension installed?
  8. mysql索引数据结构图解_一步一步推导MySQL索引隐秘的底层数据结构
  9. Mac上好用的视频播放器有哪些?
  10. 玄幻小说收藏(偶尔带点科幻、都市)
  11. ElasticSearch 学习(二)—— IK 分词器和 Kibana
  12. 如何通过自我介绍打动面试官?
  13. vue2.0 实现页面导航提示引导
  14. [激光原理与应用-31]:典型激光器 -3- 光纤激光器
  15. 安装activemq或者tomcat等启动时报错
  16. java计算机毕业设计老鹳窝旅游网源码+系统+数据库+lw文档+mybatis+运行部署
  17. EasyRecovery年中狂欢还没结束,震惊
  18. 【Java练习】数字加密(各位数加五对十取余并反转)
  19. 计算机老师开学第一堂课,开学第一堂课作文(精选8篇)
  20. 文本(文章内容)编辑器(CMS管理)

热门文章

  1. 我的服务器新手箱子无限,家庭影音之路 篇一:#原创新人#服务器安装Rutorrent(PT盒子)Seedbox教程...
  2. python socket编程之双方相互通信简单实例
  3. 高中信息技术真题(2022下)
  4. antd table 样式修改
  5. PAT乙级——1086(字符串操作)java实现
  6. oppo三面面经,现已拿到offer。十月份我快乐了,你呢?
  7. SQL触发器--当表数据发生变化时,将数据同步到另一张表中
  8. 最新Crack:foxit pdf sdk 8.4.1_win_java
  9. 二级计算机为让利消费者,2016年职称计算机考试Excel操作题及答案22
  10. 【转录调控网络】典型的基因转录调控网络推导方法——微分方程方法