示例#1
0
        static public AdjacencyListGraph <T, D> minimumSpanningTreeKruskal <T, D> (AdjacencyListGraph <T, D> graph)
        {
            double cost = 0;
            var    tree = new AdjacencyListGraph <T, D> (graph);

            tree.removeAllEdges();
            var sortedEdgeListByWeight = graph.edges.OrderBy(a => a.weight).ToList();

            var unionFind = new UnionFind <Vertex <T> > ();

            foreach (var vertex in graph.vertices)
            {
                unionFind.addSetWith(vertex);
            }

            foreach (var edge in sortedEdgeListByWeight)
            {
                var v1 = edge.from;
                var v2 = edge.to;
                if (false == unionFind.inSameSet(v1, v2))
                {
                    cost += edge.weight;
                    tree.addEdge(v1, v2, edge.data, edge.weight);
                    unionFind.unionSetsContaining(v1, v2);
                }
            }

            return(tree);
        }
 public AdjacencyListGraph(AdjacencyListGraph <T, D> graph)
 {
     foreach (var edge in graph.edges)
     {
         var from = createVertex(edge.from.data);
         var to   = createVertex(edge.to.data);
         addEdge(from, to, edge.data, edge.weight);
     }
 }
示例#3
0
 public Dungeon(AdjacencyListGraph <RoomType, HallwayType> graph) : base(graph)
 {
 }