0 0

多个list集合中的值形成闭环的算法10

比如有四个集合:{a,b,c,d}, {e,f}, {c,g,h}, {g,d}。

集合1和集合3通过值c关联,集合3和集合4通过值g关联,集合4和集合1通过d值关联,则形成了闭环。

在比如有四个集合:{a,b,c,d}, {e,f}, {f,g,h}, {h,d,e}。
集合2和集合3通过值f关联,集合3和集合4通过值h关联,集合4和集合2通过e值关联,则形成了闭环。

这个如何实现?

多谢!
 
2014年12月23日 15:07

3个答案 按时间排序 按投票排序

0 0

这个是不相交集问题吧,具体不相交集代码网上很多的,这里只说下思路
例如,{a,b,c,d}, {e,f}, {c,g,h}, {g,d},
首先拆解为单个值{a}{b}{c}{d}{e}{f}{g}{h}
假设我们以最小的值为根
1. 拆解为{a,b,c,d}为{a,b}{a,c}{a,d}  ({b,c}{b,d}{c,d}由于以最小值为根,这几组可以舍弃)
2. 拆解{e,f}为{e,f}
3. {c,g,h}拆解为{c,g}{c,h}  ({g,h}可以直接舍弃)
4. {g,d}拆解为{d,g}

这样我们得到{a,b}{a,c}{a,d}{e,f}{c,g}{c,h}{d,g}
对这几组执行union,执行完后如果根相同,则为闭环,否则不是

2014年12月26日 17:59
0 0

谈下思路吧
1.获得关联集合 u = {(1,3),(3,4),(1,4)}
2.从u的某个元素开始递归寻找路径,如果能回到该元素,就存在闭环

2014年12月24日 10:44
0 0

<html>
<head>
<script>
(function(){
	var x1 = ['a','b','b','f','c'];
	var x2 = ['d','u','b'];
	var x3 = ['g','c'];
	var x4 = ['i','d','c'];
	var x5 = ['o','b','b'];
	var x6 = ['p','c','g','f','v'];
	hasPath(x1,x2,x3,x4,x5,x6);
})(); 

//是否有闭环路径(该方法必有更好算法)
function hasPath(){
	if(arguments.length>2){
		var array = new Array();
		for(var i=0;i<arguments.length;i++){
			array[i] = new Array();
			for(var j=0;j<arguments.length;j++){
				var ret = hasSameNum(arguments[i],arguments[j]);
				array[i].push(ret);
			}
		}
		//得到矩阵
		/**
		for(var i=0;i<array.length;i++){
			console.log(array[i]);
		}
		*/
		/*
		[1, 1, 1, 1, 1, 1]
		[1, 1, 0, 1, 1, 0]
		[1, 0, 1, 1, 0, 1]
		[1, 1, 1, 1, 0, 1]
		[1, 1, 0, 0, 1, 0]
		[1, 0, 1, 1, 0, 1] 
		*/
		//最后通过矩阵相关运算得到闭环,上述矩阵可以得到多个闭环
	}
}

//判断两个数组是否有相同的数(该方法必有更好算法)
function hasSameNum(array1,array2){
	for(var i=0;i<array1.length;i++){
		for(var j=0;j<array2.length;j++){
			if(array1[i]==array2[j]){
				return 1;//1表示有相同的
			}
		}
	}
	return 0;//0表示没有相同的
};
</script>
</head>
<body>
</body>
</html>

2014年12月23日 18:13

相关推荐

    数据结构各种算法实现(C 模板)

    循环链表是一种特殊形式的链表,其中最后一个节点的指针不是指向空,而是指向头结点,形成一个闭环。 ### 五、顺序栈 #### SeqStack.h 顺序栈是基于顺序表实现的栈,具有固定的大小,当栈满时无法继续入栈。 ### ...

    数据结构&算法

    树是一种非线性的数据结构,由多个节点组成,其中有一个根节点,其他节点形成若干棵互不相交的子树。 **应用场景**: - 文件系统的目录结构、XML/HTML解析等。 #### 十四、B+树(BTreeNode.h, BTree.h, test.cpp)...

    2011-2012学年第二学期《数据结构与Java集合框架》机试.docx

    - **List容器**:Java中的集合框架之一,可以存储多个对象。 #### 实现思路: 1. **定义Employee类**:包含职工号、姓名和工资等属性。 2. **创建List容器**:存储`Employee`对象。 3. **查询工资**:遍历`List`...

    数据结构各种算法实现

    ### 数据结构各种算法实现 #### 1. 顺序表 **定义:** ...这些数据结构及其算法是计算机科学的基础,广泛应用于软件开发、数据库系统、搜索引擎等多个领域。掌握这些知识对于成为一名优秀的程序员至关重要。

    数据结构各种算法实现(C++模板)

    - **节点类`BTreeNode`**: 包含多个键值对和指向下一层节点的指针。 - **B+树类`BTree`**: 实现了插入、删除、查找等操作。 #### 十七、图(MinHeap.h, Edge.h, Vertex.h, Graph.h) 图数据结构由顶点集和边集组成,...

    数据结构各种算法的c++实现

    - **定义与特性**:循环链表是一种特殊的链表形式,最后一个节点的next指针指向头节点,形成一个闭环。 - **操作实现**:循环链表的操作类似于普通链表,但需要注意循环结构。 **代码示例**: ```cpp struct ...

    数据结构各种算法实现(链表、队列、树、栈、串、)

    树是一种非线性的数据结构,由多个节点组成,其中有一个根节点,其他节点分成多个不相交的集合。 **重要成员函数:** - **Insert()**: 插入结点。 - **Delete()**: 删除结点。 - **PreOrder()**: 前序遍历。 - **...

    ACM训练资料

    这意味着,如果在某个时刻,尝试将某个单词放回原处时遇到已经被驱逐的单词,那么就形成了一个闭环。这种闭环的存在表明了无限循环的发生。 ### 深度解析: #### 数据结构与算法 - **Set(集合)** 集合是一种不...

    数据结构数据结构数据结构数据结构数据结构

    4. **树(Tree)**:树是一种非线性的数据结构,由多个节点组成,这些节点之间存在一种层次化的结构。 - 二叉树:每个节点最多只有两个子节点的树。 - 平衡二叉树:二叉树的一种特殊形式,左右子树的高度差不大于1...

    C# 数据结构

    - _循环链表_: 尾节点指向头节点,形成闭环。 - **堆栈**: 另一种形式的栈,通常用于内存管理。 - _堆(Heap)_: 一种特殊的树形数据结构,通常用于实现优先级队列。 - _栈(Stack)_: 后进先出的数据结构。 - **树...

    Java后端技术面试汇总-2019

    - **多线程情况下HashMap死循环的问题**:当多个线程同时进行put操作时可能导致循环链表形成闭环。 - **HashMap出现HashDOS攻击的问题**:恶意构造大量相同的哈希值导致性能下降。 - **ConcurrentHashMap的工作...

    数据结构 C++ 实现

    循环链表是一种特殊的链表,其最后一个节点的指针指向第一个节点,形成闭环。`CircularList`继承了链表的基本特性,但其遍历逻辑略有不同,需特别处理结束条件,以避免无限循环。 ### 5、栈:SeqStack.h, LinkStack...

Global site tag (gtag.js) - Google Analytics