动态规划--电路布线(circuit layout)
《算法设计与分析》 --王晓东
题目描述:
在一块电路板的上、下2端分别有n个接线柱。根据电路设计,要求用导线(i,a(i))将上端接线柱与下端接线柱相连,其中a(i)表示上端点i对应的向端点的值。如图所示:

题目要求是在给定的连线中,选取不相交连线的最大子集,即不相交连线的最大数目。并把最大不相交子集的情况给列举处理啊。
解题思路:
首先用a[i]数组表示与上面对应点相连线的下面的点,再用set[i][j]表示上面节点i与下面节点j连线的左边(包括i j连线)的最大不相交连线的个数。
于是就有公式:
max(set[i-1][j], set[i][j-1]); j != a[i]
set(i,j) =
set[i-1][j-1] + 1; j == a[i]
然后就可以对每一个i,都对所以的j求一遍。这样就可以得出结果吗,set[n][n]即我们想要的结果。
最后通过回溯把结果输出出来。
代码实现:
#include <stdio.h> #define MAX(a,b) ((a) > (b) ? (a) : (b)) void circut(int a[],int set[][],int n);
void back_track(int i,int j,int set[][]); int main()
{
int a[] = {,,,,,,,,,,};
int set[][]; circut(a,set,); printf("max set: %d \n",set[][]);
back_track(,,set);
printf("\n"); return ;
} void circut(int a[],int set[][],int n)
{
int i,j; for (i = ; i < n; i++)
{
set[i][] = ;
set[][i] = ;
} for (i = ; i <= n; i++)
{
for (j = ; j <= n; j++)
{
if (a[i] != j)
set[i][j] = MAX(set[i-][j],set[i][j-]);
else
set[i][j] = set[i-][j-] + ;
}
}
} void back_track(int i,int j,int set[][])
{
if (i == )
return;
if (set[i][j] == set[i-][j])
back_track(i-,j,set);
else if (set[i][j] == set[i][j-])
back_track(i,j-,set);
else
{
back_track(i-,j-,set);
printf("(%d,%d) ",i,j);
}
} // :
动态规划--电路布线(circuit layout)的更多相关文章
- 算法java实现--动态规划--电路布线问题
/* * dianlubuxian.java * Version 1.0.0 * Created on 2017年11月30日 * Copyright ReYo.Cn */ package reyo. ...
- PCB Layout 中的高频电路布线技巧
1.多层板布线 高频电路往往集成度较高,布线密度大,采用多层板既是布线所必须,也是降低干扰的有效手段.在PCB Layout阶段,合理的选择一定层数的印制板尺寸,能充分利用中间层来设置屏蔽,更好地实现 ...
- C++ 电路布线/最短路径问题
问题描述 用二维数组表示地图,若值为 1 则表示有障碍物,若值为 0 则表示可以通行. 输入: m*n 的二维数组,布线起点坐标,布线终点坐标. 输出: 最短布线距离以及对应的布线路径. 问题分析 从 ...
- PCB布线设计-模拟和数字布线的异同(转)
工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势.尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与模拟或现实环境接口的电路设计.模拟和数 ...
- 布线问题&魔法花园_最短路径
布线问题 问题描述:印刷电路板将布线区域划分成n×m个方格阵列,精确的电路布线问题要求确定连接方格a到方格b的最短布线方案:布线时,电路只能沿着直线或直角(方格)布线:已经布线的方格被锁定,即不允许其 ...
- PCB走线分析——直角、差分、蛇形线
PCB直角走线的影响 布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...
- js地址下拉列表中全职工作
/******************************************************************* *输出全国各省辖市下拉列表项writeCitys() *输出企 ...
- PCB直角走线的影响
PCB直角走线的影响 布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...
- 牛人的ACM经验 (转)
一:知识点 数据结构: 1,单,双链表及循环链表 2,树的表示与存储,二叉树(概念,遍历)二叉树的 应用(二叉排序树,判定树,博弈 ...
随机推荐
- logstash 中多行合并
这里我之前是在input里面配置的多行合并,合并语法为: input { beats { type => beats port => 7001 codec => multiline ...
- JDK1.6新特性,WebService强化
Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web ...
- Android开发之API应用指南
原文:http://android.eoe.cn/topic/android_sdk 编辑流程 这里主要是和Android技术相关的开发指南,很多都是来源于官方的API Guides( http:// ...
- 给现有MVC项目增加Web API支持
在MVC4中自带了Web API不再需要从Nuget中下载. Step1:增加System.Web.Http,System.Web.Http.WebHost,System.Net.Http三个程序集的 ...
- git 生成ssh keys
最近从svn转到gitlab 记录一下如何生成ssh keys 首先下载GitExtensions246SetupComplete.msi并安装,如果已经安装了git,那么安装途中就跳过就行 安装完毕 ...
- 【Unity】12.3 Off Mesh Link组件
开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 Off Mesh Link组件用于手动指定路线来生成分离的网格连接.例如,游戏中让行进对象上下 ...
- java.lang.SecurityException:Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged
转自:http://www.cnblogs.com/orientsun/archive/2012/11/04/2753270.html Error: java.lang.SecurityExcepti ...
- 简单修改文件名python脚本
import os import sys path = "D:\emojis" for (path,dirs,files) in os.walk(path): for filena ...
- 88个 Linux 系统管理员必备的监控工具
随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...
- spring cloud 项目相关集成简介
Spring Cloud Config 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus 事件.消 ...