示例#1
0
        public static bool IsTree <TVertex>(this IVertexAndEdgeListGraph <TVertex, Edge <TVertex> > graph)
        {
            if (graph.Edges.Any(e => e.IsSelfEdge <TVertex, Edge <TVertex> >()))
            {
                return(false);
            }
            if (graph.VertexCount == 0)
            {
                return(true);
            }

            var undirectedGraph = new UndirectedGraph <TVertex, Edge <TVertex> >(true);

            graph.Clone(v => v, (e, src, tgt) => e, undirectedGraph);

            var dfs           = new UndirectedDepthFirstSearchAlgorithm <TVertex, Edge <TVertex> >(undirectedGraph);
            var foundBackEdge = false;

            dfs.BackEdge += delegate { foundBackEdge = true; };
            dfs.Compute();
            return(!foundBackEdge);
        }