0

私はこれを2日間続けて解決しようとしていますが、有効なアルゴリズムが見つかりません. チェス盤といくつかの駒が与えられた場合、各駒が正方形を 1 回しか訪問できないという条件で、その盤が駒で巡回できるかどうかを確認する必要があります。ある種の複数のバックトラックであることは知っていますが、機能させることができません。(個人の駒では一般騎士のツアーしか実装できていません)

tablero名前、ピースのリスト、禁止位置のリスト、自由位置のリスト、およびボードの寸法のタプルを保持するボードのクラスです。

fichaは駒のクラスで、名前 ( nombre)、位置を含むタプル ( posicion)、有効な動きを含むリスト( ) を保持しますmovimientos(たとえば、ポーンのリストは [ [0,1] ] になります。前に進むだけ 1)

どんな洞察も大歓迎です。

クラスは次のとおりです (任意のメソッドを自由に追加/削除してください)。

def legal(pos,dimensiones):
    if pos[0] >= 0 and pos[0] < dimensiones[0] and pos[1] >= 0 and pos[1] < dimensiones[0]:
        return True
    else:
        return False


class board:

    def __init__(self,name,pieces,dimention,prohibited_positions):
        self.name = name
        self.pieces = pieces
        self.dimention = dimention
        self.prohibited_positions = prohibited_positions
        self.free_positions = []
        for x in range(dimention[0]):
            for y in range(dimention[1]):
                self.free_positions.append([x,y])
        for x,y in self.prohibited_positions:
            if [x,y] in self.free_positions:
                self.free_positions.remove([x,y])
        for piece in self.pieces:
            if self.piece.position in self.free_positions:
                self.free_positions.remove(piece.position)


    def append(self,piece):
        pos = piece.position
        if pos in self.free_positions:
            self.pieces.append(piece)
            self.free_positions.remove(pos)



class piece:

    def __init__(self,name,position,move_offsets):  
        self.name=name
        self.position=position
        self.move_offsets=move_offsets
        self.possible_movements=move_offsets

    def setPos(self,pos):
        self.position=pos

    def ValidMovements(self,dim,free_positions,prohibited_positions):
        aux = []
        for i in self.possible_movements:
            newX = self.position[0] + i[0]
            newY = self.position[1] + i[1]
            newPos = [newX,newY]
            if legal(newPos,dim):
            aux.append(newPos)
        for i in list(aux):
            if i not in free_positions:
                aux.remove(i)
4

0 に答える 0