У меня есть матрица 8x10 с заблокированными квадратами:
no = [(2,4),(3,4),(6,4),(7,4),(2,5),(3,5),(6,5),(7,5)]
И мне нужно выяснить, является ли кратчайший (манхэттенский) путь между двумя точками, заданными этой функции в виде вложенного кортежаподобно ((0,5), (6,2)), содержит любой блок и перенаправляет его вокруг.
Теперь, чтобы сделать это, я пытался применить логику, которая работает для евклидова расстояния, котороечтобы узнать, находится ли C на линии между A и B , добавив расстояние от A до C на расстояние от C до B и посмотреть, равняется ли оно A до B , но я не доверяю математике ...
def manhattan_dist(move): #order doesn't matter
a = move[0][0]
b = move[0][1]
c = move[1][0]
d = move[1][1]
mandist = abs(a-c)+abs(b-d)
if (any (abs(a-box[0])+abs(b-box[1])) == (mandist-(abs(c-box[0])+abs(d-box[1]))) for box in no):
print("blocked")
#calculate go-around logic
return mandist
Он печатает «заблокировано» для manhattan_dist(((0,1),(0,7)))
, так что я знаю, что я тоже делаю что-то не так в питоне.