Esempio n. 1
0
 def countConnected(self, board, side):
     """Counts how many pieces for the given side touch another piece
     of the same side."""
     queue = FIFO_Queue()
     counted = set()
     acc = 0
     for row in range(self.size):
         for col in range(self.size):
             if board[row][col] == side:
                 queue.add((row, col))
     while len(queue) > 0:
         row, col = queue.get()
         for n in self.getNeighbors(row, col):
             r, c = n
             if board[r][c] == side and n not in counted:
                 counted.add((r, c))
                 acc += 1
                 
     return (acc * side)
Esempio n. 2
0
 def whiteWins(self, board):
     """Returns True if white player wins, otherwise False."""
     queue = FIFO_Queue()
     visited = set()
     # Add all locations of white pieces n the top row to queue
     for col in range(self.size):
         if board[0][col] == -1:
             queue.add((0, col))
     # Try to find a path to the bottom row
     while len(queue) > 0:
         row, col = queue.get()
         visited.add((row, col))
         for n in self.getNeighbors(row, col):
             r, c = n
             if board[r][c] != -1: continue
             if r == self.size-1: return True
             if n in visited or n in queue:
                 continue
             queue.add(n)
     return False
Esempio n. 3
0
 def blackWins(self, board):
     """Returns True if black player wins, otherwise False."""
     queue = FIFO_Queue()
     visited = set()
     # Add all locations of black pieces in the leftmost col to queue
     for row in range(self.size):
         if board[row][0] == 1:
             queue.add((row, 0))
     # Try to find a path to the rightmost col
     while len(queue) > 0:
         row, col = queue.get()
         visited.add((row, col))
         for n in self.getNeighbors(row, col):
             r, c = n
             if board[r][c] != 1: continue
             if c == self.size-1: return True
             if n in visited or n in queue:
                 continue
             queue.add(n)
     return False
Esempio n. 4
0
    def __init__(self, maze, mode):
        """
        Inputs:
            maze: a MazeClass.Maze instance
            mode: one of "BFS", "DFS", or "RND"
        """
        self.mz = maze  #just made a new, shorter name.
        self.free = {}
        self.parents = {}
        self.walls = {}
        self.start = maze.start
        self.end = maze.goal

        if mode == "DFS":
            self.frontier = LIFO_Queue()

        elif mode == "BFS":
            self.frontier = FIFO_Queue()

        elif mode == "RND":
            self.frontier = Random_Queue()
Esempio n. 5
0
    def countStronglyConnectedPositions(self, board, side):
        """
        计算牢固连接的位置
        @param board - the current board
        @param side - the current player side
        """
        queue = FIFO_Queue()
        counted = set()
        acc = 0
        for row in range(self.size):
            for col in range(self.size):
                if board[row][col] == side:
                    queue.add((row, col))

        while len(queue) > 0:
            row, col = queue.get()
            for n in self.getStronglyConnectedPositions(row, col, side):
                r, c, s = n
                if board[r][c] == side and (r, c) not in counted:
                    counted.add((r, c))
                    acc += s                    
        return (acc * side)
Esempio n. 6
0
    def countConnectedGap(self, board, side):
        """
        Counts how many pieces for the given side touch another piece of the same side.
        @param board - the current board
        @param side - the current player side
        """
        queue = FIFO_Queue()
        counted = set()
        acc = 0
        for row in range(self.size):
            for col in range(self.size):
                if board[row][col] == side:
                    queue.add((row, col))

        while len(queue) > 0:
            row, col = queue.get()
            for n in self.getNeighborsGap(row, col, side):
                r, c, s = n
                if board[r][c] == side and (r, c) not in counted:
                    counted.add((r, c))
                    acc += s

        return (acc * side)