`
viking.liu
  • 浏览: 53945 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

查找无向图中的环

阅读更多
static int[][] M = { 
			{ 0, 1, 0, 0, 0, 0 },
			{ 1, 0, 1, 1, 0, 0 },
			{ 0, 1, 0, 1, 0, 0 }, 
			{ 0, 1, 1, 0, 1, 1 },
			{ 0, 0, 0, 1, 0, 0 }, 
			{ 0, 0, 0, 1, 0, 0 } };

  
    
    static int count=0;
	static int n=6;
	public static boolean findCircle(int[][] M, int i, int j) {
		boolean hasEdge=false;
		for (int t = 0; t < n; t++) {
			if (t != j) {
				if (M[i][t] == 2) {
					// find circle
					// print start vertex
					System.out.println(i + 1);
					// delete start vertex edage
					deleteVertexAndEdge(M, i);
					// find a circle
					count++;
					hasEdge=true;
					return true;
				} else if (M[i][t] == 1) {
					// visit
					M[i][t] = 2;
					hasEdge=true;
					if (findCircle(M, t, i)) {
						// 
						if (isDelete(M, i)) {
							// find the start vertex of circle
							return false;
						}
						deleteVertexAndEdge(M, i);
						System.out.println(i + 1);
						return true;
					}
				}
			}
		}
		if(!hasEdge&&i<n-1&&M[i][j]==0){
			// if the i vertex is isloated vertex 
			findCircle(M, i+1, 0);
		}
		return true;
	}

	// delete all edge of current vertex
	public static void deleteVertexAndEdge(int[][] M, int i) {
		for (int t = 0; t < n; t++) {
			M[t][i] = -1;
			M[i][t] = -1;
		}
	}

	public static boolean isDelete(int[][] M, int i) {
		for (int t = 0; t < n; t++) {
			if (M[t][i] != -1) {
				return false;
			}
		}
		return true;
	}
分享到:
评论

相关推荐

    无向图中寻找所有的环路

    在深度优先搜索无向图的过程中,当遇到起始点的时候,会认定为出现环(在本文中只是找出了无向图中所有的长度大于等于3的环(长度为1和2的环没有意思),所以在深搜的过程中,当遇到的是起始点的时候,还需要进行...

    Java版查找并打印有向图中的所有环路径

    在标题中提到的"Java版查找并打印有向图中的所有环路径",这个问题涉及到图论中的一个经典问题——寻找环路。在实际应用中,如线程死锁识别,有向图的环路检测具有重要价值,因为线程间的资源依赖关系可以被抽象为有...

    如何求无向图的最小环

    最小环问题是指在无向图中找出具有最小权重的环。这个问题在算法设计和图算法优化中具有重要的地位,比如在解决旅行商问题(Traveling Salesman Problem, TSP)时就常常会遇到。本文将深入探讨如何求解无向图的最小...

    有向无环图拓扑排序并输出圈

    在"有向无环图拓扑排序并输出圈"的问题中,我们首先需要检查图是否为DAG。这通常通过DFS实现,使用一个颜色数组记录每个节点的状态(白色表示未访问,灰色表示正在访问,黑色表示已访问)。如果在DFS过程中发现一条...

    chemperl无向图中找简单闭合回路perl的实现.pdf

    在本文档中,我们探讨了如何使用Perl编程语言在无向图中查找简单闭合回路。这个任务涉及图论中的基本概念,如邻接矩阵、连通分量、生成树以及广度优先搜索(BFS)算法。下面将详细阐述这些知识点。 首先,邻接矩阵...

    无向图的广度优先生成树

    无向图的广度优先生成树(BFS Tree)是一种在无向图中寻找特定根节点的树形结构,该树的构造方式是通过广度优先搜索(Breadth-First Search, BFS)进行的。在图论和计算机科学中,这种遍历方法常用于寻找最短路径、...

    无向图最短路径

    无向图最短路径是图论中的一个经典问题,在计算机科学和网络算法中有着广泛的应用。无向图意味着图中的边没有方向性,任何两个节点之间可以互相到达。本代码包着重于解决如何找到无向图中任意两点之间的最短路径,...

    邻接表实现无向图的建立与遍历,最小生成树以及最短路径

    在计算机科学中,无向图的表示方式有很多种,其中邻接表是一种常用的高效存储方法。邻接表相比于邻接矩阵,对于稀疏图(边的数量远小于顶点数量的平方)更为节省空间。 邻接表由一个数组或链表组成,每个元素对应图...

    数据结构:无向图连接矩阵

    5. **查找路径**:对于无向图,如果矩阵的[i][j]或[j][i]为1,那么节点i和j之间存在路径。 6. **计算连通分量**:通过检查矩阵非零元素,可以确定图的连通性,找出所有连通的子图。 7. **空间效率**:无向图的邻接...

    有向无环图操作示例代码.zip_有向图_有向图 环_有向无环图

    - 有向无环图(DAG):没有环的有向图,即不存在从一个节点出发可以回到自身的路径。 2. 操作: - Topological Sort:拓扑排序是将DAG中的所有节点排列成线性顺序,使得对于每一条边 (u, v),节点 u 都在节点 v ...

    数据结构作业之六图图

    3. 最小生成树:Prim算法或Kruskal算法用于寻找带权重的无向图中的最小生成树,即连接所有顶点且边权重和最小的子集。 此外,图还有其他高级概念,如强连通分量(有向图中任何两个顶点都可以互相到达的子图)、二分...

    Java判断无向图中是否存在环

    在某些场景下,例如在路径查找或算法设计中,我们需要判断一个无向图中是否存在环。环是指在图中可以找到一条路径,这条路径从某个节点出发,经过一系列边,最终又回到了起点。 本问题中提到的Java代码实现了一个...

    leetcode323. 无向图中连通分量的数目

    在计算机科学中,无向图是一种图形结构,其中的边不具有方向性,即边可以双向连接两个节点。题目“leetcode323. 无向图中连通分量的数目”是关于寻找无向图中的连通分量数量的问题。连通分量是指图中任意两个节点...

    java实现带权无环图关键路径查找

    在这个场景中,我们关注的是如何使用Java编程语言来实现对带权无环图(Weighted Acyclic Graph,WAG)的关键路径查找算法。 首先,我们要理解什么是带权无环图。在图论中,一个无环图是指没有形成环路的图,而带权...

    python判断无向图环是否存在的示例

    在探讨Python编程中判断无向图中是否存在环的问题时,通常会使用图的深度优先搜索(DFS)算法。无向图是一种图的类型,其中任意两个顶点之间的连接都是双向的,没有方向之分。在无向图中,一个环是指一条路径,其...

    Map_camp599_有向无环图_Vc_

    在"Map_camp599_有向无环图_Vc_"这个项目中,我们可以推测这是一组使用C++(Vc通常指的是Visual C++)编写的源代码,专注于实现对有向无环图的操作。在C++中,处理图数据结构通常涉及自定义节点类和边类,以及遍历、...

    数据结构复习题六.doc

    - 若无向图每个顶点的度大于等于2,则必然存在回路。 - 有向图中所有顶点的度大于2不一定有回路。 2. **图的搜索算法**: - 深度优先搜索(DFS)常采用递归实现,是一种回溯搜索策略。 - 广度优先搜索(BFS)通常...

    建立邻接表,深度搜索无向图

    邻接表是一种常见的存储无向图的方式,它比邻接矩阵更节省空间,特别是当图中边的数量远小于节点数量的平方时。 1. **邻接表的概念**: 邻接表是一种线性结构,用于存储图中每个节点的所有邻接节点(即与该节点...

    有向图的广度优先探索程序

    与无向图不同,无向图的边没有方向,可以双向遍历。 BFS算法的基本步骤如下: 1. **初始化**:选择一个起始节点(通常是最外层的节点),并将其标记为已访问。将这个节点放入一个队列中,队列是一个先进先出(FIFO...

    图的遍历(包括深度 广度遍历 利用邻接矩阵 利用邻接表)

    这两种遍历方式在计算机科学中有着广泛的应用,例如在搜索算法、路径查找、网络拓扑排序、有向无环图(DAG)的任务调度等领域。 首先,我们来详细了解一下深度优先搜索(DFS)。DFS是一种递归的遍历策略,其基本思想是...

Global site tag (gtag.js) - Google Analytics