Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as Plain Text by vd ( 14 years ago )
#!/usr/bin/python
"""Программа выводит кол-во ходов, необходимых шахматному коню
для попадания из одной точки в другую"""

# Тут наши координаты, начальная и конечная, при том горизонтальная
# записывается цифрой (A=1, H=8). Можно их запрашивать у юзера, потом парсить
# (превращать A в 1 и т.д.), проверяя ошибки, но в цели данного примера это
# не входит
# =========================================================================== #
beg = [1, 1]
fin = [7, 8]
# =========================================================================== #


def islegal(coord):
    """Вернуть True, если такая клетка есть на доске и False, если за пределами
    """
    if (coord[0] < 1) or (coord[0] > 8) or (coord[1] < 1) or (coord[1] > 8):
        return False
    else:
        return True

def get_moves(coord):
    """Вернуть список всех клеток, на которые может пойти конь из
    клетки coord"""
    x = coord[0]
    y = coord[1]
    moves = []
    for c in [[x-2, y-1], [x-2, y+1],
              [x+2, y-1], [x+2, y+1],
              [x-1, y+2], [x-1, y-2],
              [x+1, y+2], [x+1, y-2]]:
        if islegal(c):
            moves.append(c)
    return moves



def min_moves(beg, fin):
    """Вернуть кол-во ходов, нужных коню для перемещение из beg в fin)"""
    move = 0
    result = False

    now = [beg]

    while not result:
        if fin in now:
            result = True
        else:
            nxt = []
            for c in now:
                nxt += get_moves(c)
            move += 1
            now = nxt
    return move


# Находим результат
move = min_moves(beg, fin)

#Выводим
print("Чтобы добраться из координаты {0} в координату {1}, коню надо {2} ход[ов]".format(beg, fin, move))

 

Revise this Paste

Children: 58759
Your Name: Code Language: