算法java实现–动态规划–电路布线问题

算法java实现–动态规划–电路布线问题

大家好,又见面了,我是全栈君。

/*
* dianlubuxian.java
* Version 1.0.0
* Created on 2017年11月30日
* Copyright ReYo.Cn
*/
package reyo.sdk.utils.test.dy;

/**
* <B>创  建 人:</B>AdministratorReyoAut <BR>
* <B>创建时间:</B>2017年11月30日 下午4:58:56<BR>
*
* @author ReYo
* @version 1.0
*/
/**
 * 电路布线问题(动态规划)
 * @author Lican
 *
 */
public class dianlubuxian {
	public int[] c;//
	public int[][] size;//最大不想交子集
	public int[] net;

	public dianlubuxian(int[] cc) {
		this.c = cc;
		this.size = new int[cc.length][cc.length];//下标从1开始
		this.net = new int[cc.length];
	}

	public void mnset(int[] c, int[][] size) {
		int n = c.length - 1;
		for (int j = 0; j < c[1]; j++) {//i=1时,分了两种情况,分别等于0,1
			size[1][j] = 0;
		}
		for (int j = c[1]; j <= n; j++) {
			size[1][j] = 1;
		}
		for (int i = 2; i < n; i++) {//i大于1时,同样分了两种情况(当i=n时单独计算,即此方法最后一行)
			for (int j = 0; j < c[i]; j++) {//第一种
				size[i][j] = size[i - 1][j];
			}
			for (int j = c[i]; j <= n; j++) {//第二种
				size[i][j] = Math.max(size[i - 1][j], size[i - 1][c[i] - 1] + 1);
			}
		}
		size[n][n] = Math.max(size[n - 1][n], size[n - 1][c[n] - 1] + 1);
	}

	//构造最优解
	public int traceback(int[] c, int[][] size, int[] net) {
		int n = c.length - 1;
		int j = n;
		int m = 0;
		for (int i = n; i > 1; i--) {
			if (size[i][j] != size[i - 1][j]) {
				net[m++] = i;
				j = c[i] - 1;
			}

		}
		if (j >= c[1])
			net[m++] = 1;
		System.out.println("最大不相交连线分别为:");
		for (int t = m - 1; t >= 0; t--) {
			System.out.println(net[t] + "  " + c[net[t]]);
		}
		return m;
	}

	public static void main(String[] args) {
		int[] c = { 0, 8, 7, 4, 2, 5, 1, 9, 3, 10, 6 };//下标从1开始,第一个数,0不算,总共10个数
		dianlubuxian di = new dianlubuxian(c);
		di.mnset(di.c, di.size);
		int x = di.traceback(di.c, di.size, di.net);
		System.out.println("最大不相交连线数目为::" + x);
	}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107866.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • no debuggable processes_no port for remote debugger

    no debuggable processes_no port for remote debuggerAlwaysusethedebugruntimeduringthedevelopmentcycleUsethereleaseversionduringthedevelopmentphasetomeasuretheperformance/CPUutilizationoftheapplicationInstallan

    2022年10月11日
    1
  • java随机数_Java随机「建议收藏」

    java随机数_Java随机「建议收藏」java随机数JavaRandomclassisusedtogenerateaseriesofrandomnumbers.JavaRandom类用于生成一系列随机数。Java随机类(JavaRandomClass)Randomclassispartofjava.utilpackage.Random类是java.util包的一部分。Anins…

    2022年7月7日
    19
  • ubuntu的ssh连不上_ubuntu网络连接没有显示出来

    ubuntu的ssh连不上_ubuntu网络连接没有显示出来之前发在其他的博客上的,现在移动以下位置之前的链接:http://blog.chinaunix.net/uid-69944074-id-5831708.html(原创文章)使用Ubuntu,经常需要需要SSH远程连接,但是有时候会出现问题,难以捉摸,下面参考别人的,在结合自己的尝试总结下吧。服务器配完ubuntu系统以及LNMP环境以后,想用WINSCP远程登录,就需要开启SSH服务才能支持。SSH服务分为客户端和服务器。顾名思义,我想用putty远程登录Ubuntu服务器,所以需要安装SSH s

    2022年8月8日
    6
  • 监督学习、无监督学习、半监督学习、强化学习、自监督学习

    监督学习、无监督学习、半监督学习、强化学习、自监督学习一文读懂监督学习、无监督学习、半监督学习、强化学习四种方式 青烟王国 图:pixabay「机器人圈」导览:一般说来,训练深度学习网络的方式主要有四种:监督、无监督、半监督和强化学习。在接下来的文章中,机器人圈将逐个解释这些方法背后所蕴含的理论知识。除此之外,机器人圈将分享文献中经常碰到的术语,并提供与数学相关的更多资源。本文编译自硅谷著名的风险投资机构安德森霍洛维茨基金,作…

    2022年9月14日
    0
  • FinalShell简单的使用

    FinalShell简单的使用今天真的是很丧的一天,早上来到公司写了一会代码,需要用xshell时发现,以前都能打开的xshell突然出问题了。如下截图…于是想着重启看看。我的天,重启之后,网卡没了,接着就是死活连不上网,不管设置什么都连接不上网,驱动也装不上去,反正就是十八般武艺全用上了(博主可能比较菜),都没作用,于是请人,反正弄了半天,给我放个大招,重装系统 。重装系统肯定就好了,可是环境都没了,开始一点…

    2022年6月13日
    81
  • 崔立强:Dev无感Ops,如何做到高效软件交付[通俗易懂]

    崔立强:Dev无感Ops,如何做到高效软件交付

    2022年4月3日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号