算法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)
上一篇 2022年3月12日 下午12:35
下一篇 2022年3月12日 下午12:35


相关推荐

  • c语言自定义BOOL函数

    c语言自定义BOOL函数C语言中没有BOOL类型变量,它是C++独有的,由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两种:第一种:采用宏定义方式typedefintBOOL;#definetrue1#definefalse0或写为:#ifndefbool#defineboolint#endif#ifndeftrue…

    2022年5月30日
    91
  • 数据挖掘笔记——概念学习

    数据挖掘笔记——概念学习nbsp nbsp nbsp nbsp 概念学习可近似为分类问题 例如一个小孩子看过几种鸟的图片 如果再给他一张另外一种没见过的鸟的图片 他还是可以认出这是只鸟 换句话说他已经建立了 鸟 这一概念 进而根据一些特征进行判断是或不是属于这个概念 一 概念和概念学习的定义 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 概念是在一个更大的集合里面定义一个对象或者事物的子集 或者说是一个从更大的集合里面学到的布尔函数 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 概念学习 指自动地给出概念的定义

    2026年3月17日
    3
  • mac phpstorm 激活码2021(最新序列号破解)

    mac phpstorm 激活码2021(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    427
  • ReLU激活函数的特点

    ReLU激活函数的特点ReLU RectifiedLin 修正线性单元 函数 1 公式 可以看出这是个非常简单的函数 大于 0 部分不变 小于 0 的值全部压缩成 0 2 优点 作为激活函数 计算简单 更加高效 速度快神经元得到一个值 可以直接看这个值的大小 然后直接得出结果 不用多余的加减乘除计算 ReLU 函数也被认为具有生物学合理性单侧抑制 小于 0 全部抑制 宽兴奋边界 大于 0 的部分达到无穷都可以 没有限制 即兴奋程度可以很高 有很好的稀疏性 能让小于 0 的全部变为 0 增大了稀疏性 稀疏性越大 是指

    2026年3月17日
    2
  • python动态库反初始化_tensorflow CPU指令集缺失导致报错:动态链接库(DLL)初始化例程失败…

    python动态库反初始化_tensorflow CPU指令集缺失导致报错:动态链接库(DLL)初始化例程失败…无论是 tensorflow 的 CPU 版本还是 GPU 版本 其启动都需要经过 CPU 的指令 如果指令集缺失就会报错 这些报错的原因很有可能是你的 CPU 过老 或者规格属于服务器级别 如旧版本的志强系列 CPU 这一切的原因都有可能造成 ImportError DLLloadfaile 动态链接库 DLL 初始化例程失败报错 如 gt gt gt importtensor

    2026年3月26日
    1
  • 解决Oracle11g空表无法导出的问题[通俗易懂]

    解决Oracle11g空表无法导出的问题

    2022年2月6日
    43

发表回复

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

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