算法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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • css height 100% 和 100vh 区别

    css height 100% 和 100vh 区别1.height100%意思就是,想在这container设置高度![有约束]高度设置成100%但是呢这得看container的父级body的height是否为100%还往上看body的父级html的height是否为100%container->body->html[他们的height元素都要设置为100%]<html><head><style>html,bod

    2022年5月18日
    59
  • 树:二叉树的层序遍历算法(超简洁实现及详细分析)

    树:二叉树的层序遍历算法(超简洁实现及详细分析)实现思路我们来看看下图的二叉链表如何实现层序遍历。层序遍历顺序:ABECDGA为B、E的双亲结点,遍历顺序是根-&gt;左-&gt;右是不是。而且每个结点都是这样的遍历顺序有木有。那么我们完全可以采用队列的数据结构呗。A入队-&gt;然后出队,出队时将其左右孩子入队,循环队列进行出队,每次出队将其左右孩子入队。当队列为空时,整棵树层序遍历完毕。还没明白请看下面过程。A-&g…

    2022年5月21日
    45
  • Django(61)认证组件源码分析

    Django(61)认证组件源码分析认证组件源码入口APIView下的dispatch下的self.initial(request,*args,**kwargs),源码如下:definitial(self,request,

    2022年7月31日
    9
  • 单片机c语言毕业设计,单片机毕业设计的总结.docx

    单片机c语言毕业设计,单片机毕业设计的总结.docx单片机毕业设计的总结单片机毕业设计总结篇一:单片机课程设计总结报告参考模板  湖州师范学院求真学院  课程设计总结报告  课程名称单片机应用系统设计  设计题目基于STC89C51的数字电子钟设计  专业电子科学与技术  班级  姓名张静  学号12  指导教师李祖欣吴小红  报告成绩  求真学院信息与工程系  二〇一一年六月一日  《单片机应用…

    2022年10月3日
    0
  • Python终将成为最火爆的编程语言,因为它是属于大众的「建议收藏」

    Python终将成为最火爆的编程语言,因为它是属于大众的「建议收藏」很多培训机构宣称py是人工智能必备的编程语言,打着速成的旗号来引诱学者学习python。事实却并不是这样的,万丈高台平地起,不论你想从事怎样的编程工作,都是从最基本的编程技巧开始的;Python并不适合所有人,如果你是一个编程类专业的学生,适度了解python是有必要的(python的第三方库的爆发造就了不少C/C++程序员的就业),但如果你作为一个非编程类专业但又需要了解编程的人…

    2022年10月4日
    3
  • 版本号命名规范及原则是什么_软件开发版本号定义方式

    版本号命名规范及原则是什么_软件开发版本号定义方式1命名规范主版本号.子版本号.修正版本号2命名原则(1)项目初版本时,版本号可以为0.1.0;(2)当项目在进行了局部修改或bug修正时,主版本号和子版本号都不变,修正版本号加1;(3)当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加1,修正版本号复位为0;(4)当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版…

    2022年9月11日
    2

发表回复

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

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