-
多个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个答案 按时间排序 按投票排序
-
这个是不相交集问题吧,具体不相交集代码网上很多的,这里只说下思路
例如,{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
-
谈下思路吧
1.获得关联集合 u = {(1,3),(3,4),(1,4)}
2.从u的某个元素开始递归寻找路径,如果能回到该元素,就存在闭环2014年12月24日 10:44
-
<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
相关推荐
循环链表是一种特殊形式的链表,其中最后一个节点的指针不是指向空,而是指向头结点,形成一个闭环。 ### 五、顺序栈 #### SeqStack.h 顺序栈是基于顺序表实现的栈,具有固定的大小,当栈满时无法继续入栈。 ### ...
树是一种非线性的数据结构,由多个节点组成,其中有一个根节点,其他节点形成若干棵互不相交的子树。 **应用场景**: - 文件系统的目录结构、XML/HTML解析等。 #### 十四、B+树(BTreeNode.h, BTree.h, test.cpp)...
- **List容器**:Java中的集合框架之一,可以存储多个对象。 #### 实现思路: 1. **定义Employee类**:包含职工号、姓名和工资等属性。 2. **创建List容器**:存储`Employee`对象。 3. **查询工资**:遍历`List`...
### 数据结构各种算法实现 #### 1. 顺序表 **定义:** ...这些数据结构及其算法是计算机科学的基础,广泛应用于软件开发、数据库系统、搜索引擎等多个领域。掌握这些知识对于成为一名优秀的程序员至关重要。
- **节点类`BTreeNode`**: 包含多个键值对和指向下一层节点的指针。 - **B+树类`BTree`**: 实现了插入、删除、查找等操作。 #### 十七、图(MinHeap.h, Edge.h, Vertex.h, Graph.h) 图数据结构由顶点集和边集组成,...
- **定义与特性**:循环链表是一种特殊的链表形式,最后一个节点的next指针指向头节点,形成一个闭环。 - **操作实现**:循环链表的操作类似于普通链表,但需要注意循环结构。 **代码示例**: ```cpp struct ...
树是一种非线性的数据结构,由多个节点组成,其中有一个根节点,其他节点分成多个不相交的集合。 **重要成员函数:** - **Insert()**: 插入结点。 - **Delete()**: 删除结点。 - **PreOrder()**: 前序遍历。 - **...
这意味着,如果在某个时刻,尝试将某个单词放回原处时遇到已经被驱逐的单词,那么就形成了一个闭环。这种闭环的存在表明了无限循环的发生。 ### 深度解析: #### 数据结构与算法 - **Set(集合)** 集合是一种不...
4. **树(Tree)**:树是一种非线性的数据结构,由多个节点组成,这些节点之间存在一种层次化的结构。 - 二叉树:每个节点最多只有两个子节点的树。 - 平衡二叉树:二叉树的一种特殊形式,左右子树的高度差不大于1...
- _循环链表_: 尾节点指向头节点,形成闭环。 - **堆栈**: 另一种形式的栈,通常用于内存管理。 - _堆(Heap)_: 一种特殊的树形数据结构,通常用于实现优先级队列。 - _栈(Stack)_: 后进先出的数据结构。 - **树...
- **多线程情况下HashMap死循环的问题**:当多个线程同时进行put操作时可能导致循环链表形成闭环。 - **HashMap出现HashDOS攻击的问题**:恶意构造大量相同的哈希值导致性能下降。 - **ConcurrentHashMap的工作...
循环链表是一种特殊的链表,其最后一个节点的指针指向第一个节点,形成闭环。`CircularList`继承了链表的基本特性,但其遍历逻辑略有不同,需特别处理结束条件,以避免无限循环。 ### 5、栈:SeqStack.h, LinkStack...