Beispiel #1
0
    def MakeMaze(self, width, height):
        self.width = width
        self.height = height
        self.canvasWidth = width * self.SCALE_FACTOR
        self.canvasHeight = height * self.SCALE_FACTOR
        self.disjointSets = DisjointSets(width * height)
        self.mazeCells = [[MazeCell(x, y) for y in range(height)]
                          for x in range(width)]

        Xs = list(range(self.width))
        Ys = list(range(self.height))
        # cartesian product X x Y
        randomCoords = list(itertools.product(Xs, Ys))
        randomCoords.extend(randomCoords)
        random.shuffle(randomCoords)

        for (row, column) in randomCoords:
            mazeCell = self.mazeCells[row][column]
            wallRemoveDirection = random.sample(
                [Direction.RIGHT, Direction.DOWN], 1)[0]

            if (mazeCell.visitedCount == 1):
                wallRemoveDirection = Direction.RIGHT if mazeCell.rightWallExists else Direction.DOWN

            a = self._findSetIndex(row, column)
            b = self._findSetIndex(row, column, wallRemoveDirection)

            if (self._checkBoundary(row, column, wallRemoveDirection)
                    and self.disjointSets.SetUnion(a, b)):
                self._setWall(mazeCell, wallRemoveDirection, False)

            mazeCell.visitedCount += 1
Beispiel #2
0
    def test_SetUnion(self):
        numElements = 5
        test = DisjointSets(numElements)

        self.assertEqual(test.SetUnion(0, 2), True)
        self.assertEqual(test.uptrees, [2, -1, -2, -1, -1])

        self.assertEqual(test.SetUnion(0, 2), False)
        self.assertEqual(test.uptrees, [2, -1, -2, -1, -1])

        self.assertEqual(test.SetUnion(1, 2), True)
        self.assertEqual(test.uptrees, [2, 2, -3, -1, -1])

        self.assertEqual(test.SetUnion(4, 4), False)
        self.assertEqual(test.uptrees, [2, 2, -3, -1, -1])

        self.assertEqual(test.SetUnion(5, 5), False)
        self.assertEqual(test.uptrees, [2, 2, -3, -1, -1])

        self.assertEqual(test.SetUnion(3, 4), True)
        self.assertEqual(test.uptrees, [2, 2, -3, 4, -2])

        self.assertEqual(test.SetUnion(0, 3), True)
        self.assertEqual(test.uptrees, [2, 2, -5, 4, 2])

        self.assertEqual(test.SetUnion(-1, -2), False)
        self.assertEqual(test.uptrees, [2, 2, -5, 4, 2])
Beispiel #3
0
    def test_FindRoot(self):
        numElements = 5
        test = DisjointSets(numElements)
        test.uptrees = [2, 2, -4, -1, 2]

        self.assertEqual(test.FindRoot(2), 2)
        self.assertEqual(test.FindRoot(0), 2)
        self.assertEqual(test.FindRoot(-1), -1)
Beispiel #4
0
def kruskal(graph):
    """Find the minimum spanning tree of a graph."""
    msf = set()

    forest = DisjointSets()
    for v in graph.keys():
        forest.makeset(v)

    edges = []
    for u, adjlist in graph.items():
        for (v, weight) in adjlist.items():
            edges.append((u, v, weight))
    edges.sort(key=lambda edge: edge[2])

    for u, v, w in edges:
        if forest.find(u) != forest.find(v):
            msf.add((u, v, w))
            forest.union(u, v)

    return msf
Beispiel #5
0
def kruskal(G):
    aristas = G.aristas()
    aristas.sort()
    D = DisjointSets(G.num_verts)
    return aristas_sin_ciclos(aristas, D)
Beispiel #6
0
    def test_AddElements(self):
        numElements = 5
        test = DisjointSets(numElements)

        self.assertEqual(test.uptrees, list(np.repeat(-1, numElements)))