Форум сайта python.su
Помогите пожалуйста!
Дано задание:На шахматной доске стоят черный король и три белые ладьи (ладья бьет по горизонтали и вертикали). Проверить, не находится ли король под боем, а если есть угроза, то от кого именно
У меня есть часть программы которая вводит короля и ладьи:
A=[[0 for i in range(8)] for i in range(8)] "#рисует шахматную доску
def print_A(A):
for i in A:
print(i)
#вводит координаты короля
jk=int(input('координаты короля по вертикали: '))
print('= ',jk)
ik=int(input('координаты короля по горизонтали: '))
print('= ',ik)
A[jk][ik]='K'
#вводит координаты ладьи(их три)
i=0
while i<3:
y=int(input('координаты ладьи по вертикали: '))
print('= ',y)
x=int(input('координаты ладьи по горизонтали: '))
print('= ',x)
i=i+1
A[y][x]='L'
L=A[y][x]
Отредактировано (Июль 7, 2011 13:32:43)
Офлайн
Ладьи могут атаковать по вертикали и горизонтали, соответственно король может испытывать угрозу только если хоть одна ладья находится с ним в одном ряду по x или y.
И скажу наперед - угроза ему будет именно от белой ладьи :)
Отредактировано (Июль 7, 2011 15:35:43)
Офлайн
написать могу завтра днем. алгоритм - сверь соответствующие (по горизонтали и вертикали) координаты короля и каждой ладьи. + надо учесть, что между королем и ладьей2 может стоять ладья1, следственно, хоть соответствующие координаты короля и ладьи2 будут совпадать, ладья2 не бьет короля. + король может быть под ударом от сразу нескольких ладьей.
Отредактировано (Июль 8, 2011 00:54:14)
Офлайн
Добрый вечер!
У меня задача такая же.
Разработать программу для решения следующей задачи. На шахматной доске стоят три белые ладьи (ладья бьет по горизонтали и вертикали) и черный король. Проверить, не находится ли король под боем, а если есть угроза, то от какой именно ладьи. Предусмотреть варианты считывания данных о расположении фигур из файла и генерации случайных комбинаций их расположения. Отобразить результат расстановки фигур графически. Оценить О-сложность алгоритма.
Можете помочь?
Отредактировано (Окт. 28, 2011 21:13:56)
Офлайн
import sys, pprint
def input_data():
data = [[0 for i in xrange(8)] for j in xrange(8)]
cl = [int(i) for i in sys.argv[1:]]
king, data[cl[0]][cl[1]] = (cl[0], cl[1]), 1
for i in xrange(2,7,2): data[cl[i]][cl[i+1]] = 2
pprint.pprint(data)
return (king, data)
def msg(i, j):
print "rook with coords: (%i, %i)" % (i, j)
def way_check(way, data):
for (i, j) in way:
if data[i][j] == 2:
msg(i, j)
return True
return False
def strike(king, data):
check = False
# left to the king
way = [(i, king[1]) for i in range(0,king[0])]
way.reverse()
check = way_check(way, data)
# right to the king
way = [(i, king[1]) for i in range(king[0] + 1, 8)]
check = way_check(way, data)
# up to the king
way = [(king[0], i) for i in range(0, king[1])]
way.reverse()
check = way_check(way, data)
# down to the king
way = [(king[0], i) for i in range(king[1] + 1, 8)]
check = way_check(way, data)
if check:
print 'king is safe'
def main():
(king, data) = input_data()
strike(king, data)
if __name__ == '__main__':
main()
Отредактировано (Окт. 28, 2011 23:20:16)
Офлайн
Спасибо))
Офлайн