новичок в Python.
Я реализовал алгоритм поиска с ограниченной глубиной, чтобы найти маршрут от S
до G
. Где S - начальная позиция, а G - пункт назначения.
R обозначает дорогу, а X обозначает препятствие, через которое мы не можем пройти.
ADJ - это словарь, содержащий соседние пути из заданного местоположения.
Таким образом, для S соседями являются 2 и 6. 2 и 6 представляют соседние дороги. Я не включил X, поскольку X является препятствием. Однако он не может двигаться по диагонали, если одно из направлений, составляющих диагональ, содержит X.
![Black Box represents an obstacle X while the white boxes are non-obstacles](https://i.stack.imgur.com/rhiey.png)
Проблема в том, что когда я запускаю приведенный ниже код, мой алгоритм не находит маршрут и застревает навсегда, пока он не превысит предел глубины.
Существует маршрут от S до G, но мой алгоритм его не находит.
Как мне решить эту ошибку?
Спасибо
Вот мой код:
ADJ = {}
""""
SRRXG
RXRXR
RRRXR
XRXRR
RRRRX
"""
ADJ['S'] = ['2', '6']
ADJ['2'] = ['S', '3']
ADJ['3'] = ['2','8']
ADJ['G'] = ['10']
ADJ['6'] = ['S', '11']
ADJ['8'] = ['3', '13']
ADJ['10'] = ['G', '15']
ADJ['11'] = ['6', '12']
ADJ['12'] = ['11', '13', '17']
ADJ['13'] = ['8', '12']
ADJ['15'] = ['10', '20']
ADJ['17'] = ['12','22']
ADJ['19'] = ['20', '24']
ADJ['20'] = ['15','19']
ADJ['21'] = ['22']
ADJ['22'] = ['17','21','23']
ADJ['23'] = ['22', '24']
ADJ['24'] = ['19','23']
print (ADJ)
def dls(start, goal):
depth = 0
limit = 200
OPEN=[]
CLOSED=[]
OPEN.append(start)
while OPEN != []: # Step 2
if depth<=limit:
current = OPEN.pop()
if current == goal:
CLOSED.append(current)
print("Goal Node Found")
print(CLOSED)
return True
else:
CLOSED.append(current)
lst = successors(current)
for i in lst:
OPEN.append(i)
depth +=1
else:
print("Not found within depth limit")
return False
return False
def successors(city):
return ADJ[city]
def test():
start = 'S'
goal = 'G'
print("Starting a dls from " + start)
print(dls(start, goal))
if __name__ == "__main__":
test()