计算一个有向图所有的简单圈(除起点和终点外没有重复顶点的圈)
2016-11-19 13:45
302 查看
要求:先设计算法(可查文献),然后用程序实现。程序允许输入一个无向图,或从文件读入一个图,然后求出图的所有简单圈。
*******************************************************************************
*******************************************************************************
package test; import java.util.ArrayList; import java.util.Arrays; public class TestCycle { private int n; private int[] visited;//节点状态,值为0的是未访问的 private int[][] e;//有向图的邻接矩阵 private ArrayList<Integer> trace=new ArrayList<Integer>();//从出发节点到当前节点的轨迹 private boolean hasCycle=false; public TestCycle(int n,int[][] e){ this.n=n; visited=new int ; Arrays.fill(visited,0); this.e=e; } void findCycle(int v) //递归DFS { if(visited[v]==1) { int j; if((j=trace.indexOf(v))!=-1) { hasCycle=true; System.out.print("Cycle:"); while(j<trace.size()) { System.out.print(trace.get(j)+" "); j++; } System.out.print("\n"); return; } } visited[v]=1; trace.add(v); for(int i=0;i<n;i++) { if(e[v][i]==1){ findCycle(i); } } trace.remove(trace.size()-1); } public boolean getHasCycle(){ return hasCycle; } public static void main(String[] args) { int n=7; int[][] e={ {0,1,0,0,0,0,0}, {0,0,1,0,1,0,1}, {1,0,0,1,0,0,0}, {0,1,0,0,0,0,0}, {0,0,0,1,0,1,1}, {0,0,0,1,0,0,0}, {1,0,0,0,0,0,0}};//有向图的邻接矩阵 TestCycle tc=new TestCycle(n,e); tc.findCycle(2); if(!tc.hasCycle) System.out.println("No Cycle."); } }
相关文章推荐
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 从键盘输入一个由字母构成的字符串(不大于30个字符),要求从该串中取出3个不重复的字符,求所有不同的取法。如果字符串中没有取到3个不同的字符,则提示没有结果。对取出的字符要求按字母升序排列成串,对于不
- 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的
- 给定一组候选号码(C)(没有重复)和一个目标号码(T),找出C中所有候选号码和T相加的唯一组合。
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 这是一个起点,没有终点 . . .
- 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
- 给定一个数字列表,返回其所有可能的排列。 注意事项 你可以假设没有重复数字。
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- 计算一个数组所有元素之和(基于多处理器的并行开发讨论)
- 用HashSet()实现重新建立一个没有重复数据的数组
- 找以其中一个字段为不重复记录,但结果要显示所有字段内容
- 计算某个文件夹下的所有文件或根据一个或多个后缀名计算文件数或去掉某个或多个后缀名计算文件数
- sql 计算子字符串在父字符串中出现次数的一个非常简单的办法
- 一个没有了解透的简单函数: BoolToStr
- sqlserver分隔字符串,查找父类下所有子类,删除重复字符串,计算一字符串在别一字符中出现的次数
- 分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?
- 分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?
- 计算一个日期所在星期内的所有日期