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); } }
public Dungeon(AdjacencyListGraph <RoomType, HallwayType> graph) : base(graph) { }