• 无向图的判环


    (1)先介绍一下无向图的判断算法,这个比较简单:

    判断无向图中是否存在回路(环)的算法描述

    如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2

    算法:

         第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。

         第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。

         如果最后还有未删除顶点,则存在环,否则没有环。

    算法分析:

                由于有m条边,n个顶点。如果m>=n,则根据图论知识可直接判断存在环路。

        (证明:如果没有环路,则该图必然是k棵树 k>=1。根据树的性质,边的数目m = n-k。k>=1,所以:m<n)

                如果m<n 则按照上面的算法每删除一个度为0的顶点操作一次(最多n次),或每删除一个度为1的顶点(同时删一条边)操作一次(最多m次)。这两种操作的总数不会超过m+n。由于m<n,所以算法复杂度为O(n)

     

    (2)用dfs来判环。
    用dfs来判的时候需要判断一下
    比如4-5的时候如果由4访问5,然后由5开始访问它周围节点的时候,4节点无须再访问。
    int dfs(int u,int p)//u表示当前访问的节点,p表示的是它的前继节点。
    {
    	if(vis[u])//出现访问过的节点,说明有环。返回上一层节点继续搜索
         {
         	return 1;
         }
    	vis[u]=1;
    	int m=V[u].size();
    	for(int i=0;i<m;i++)
    	{
    		int v=V[u][i];
    		if(v!=p)//如果当前节点不等于它的前继的话,才访问。
    	    dfs(v,u);
    	}
    	return 0;
    } 



  • 相关阅读:
    Taglib笔记摘自http://tech.acnow.net/Html/Program/Java/200204/10/092611588.shtml
    Subversion安装手记
    java 数组排序
    JAVA 反编译
    开发EJB
    HTML 4.0 语 法 教 学 转载http://chinese.allproducts.com.tw/GB/html/#t1
    javaCollectionslist
    Ruby on Rack #1 与Rack的第一次亲密接触
    Ubuntu 安装 ruby on rails [转]来源:Ubuntu社区 作者:承古韵
    收集整理的对#!bin/sh的认识
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580123.html
Copyright © 2020-2023  润新知