一道python走迷宮算法題
前幾天逛博客時(shí)看到了這樣一道問題,感覺比較有趣,就自己思考了下方案順便用python實(shí)現(xiàn)了一下。題目如下:
用一個(gè)二維數(shù)組表示一個(gè)簡(jiǎn)單的迷宮,用0表示通路,用1表示阻斷,老鼠在每個(gè)點(diǎn)上可以移動(dòng)相鄰的東南西北四個(gè)點(diǎn),設(shè)計(jì)一個(gè)算法,模擬老鼠走迷宮,找到從入口到出口的一條路徑。
如圖所示:

先說下我的思路吧:
1、首先用一個(gè)列表source存儲(chǔ)迷宮圖,一個(gè)列表route_stack存儲(chǔ)路線圖,一個(gè)列表route_history存儲(chǔ)走過的點(diǎn),起點(diǎn)(0,0),終點(diǎn)(4,4)。
2、老鼠在每個(gè)點(diǎn)都有上下左右四種方案可選,需要定義這些方案的執(zhí)行方法。
3、最后做一個(gè)循環(huán),如果當(dāng)前點(diǎn)不是(4,4)的話就依次執(zhí)行上下左右四種方法,但是有些限制,比如嘗試走過的點(diǎn)不會(huì)再嘗試走,(0,x)點(diǎn)無法再執(zhí)行向上的方法等等。
貼一下代碼:
# _*_ coding:utf-8 _*_
route_stack = [[0,0]]
route_history = [[0,0]]
source=[[0,0,1,0,1],[1,0,0,0,1],[0,0,1,1,0],[0,1,0,0,0],[0,0,0,1,0]]
def up(location):
#橫坐標(biāo)為0,無法再向上走
if location[1] == 0:
return False
else:
new_location = [location[0],location[1]-1]
#已經(jīng)嘗試過的點(diǎn)不會(huì)嘗試第二次
if new_location in route_history:
return False
#碰到墻不走
elif source[new_location[0]][new_location[1]] == 1:
return False
else:
route_stack.append(new_location)
route_history.append(new_location)
return True
def down(location):
if location[1] == 4:
return False
else:
new_location = [location[0],location[1]+1]
if new_location in route_history:
return False
elif source[new_location[0]][new_location[1]] == 1:
return False
else:
route_stack.append(new_location)
route_history.append(new_location)
return True
def left(location):
if location[0] == 0:
return False
else:
new_location = [location[0]-1,location[1]]
if new_location in route_history:
return False
elif source[new_location[0]][new_location[1]] == 1:
return False
else:
route_stack.append(new_location)
route_history.append(new_location)
return True
def right(location):
if location[0] == 4:
return False
else:
new_location = [location[0]+1,location[1]]
if new_location in route_history:
return False
elif source[new_location[0]][new_location[1]] == 1:
return False
else:
route_stack.append(new_location)
route_history.append(new_location)
return True
lo = [0,0]
while route_stack[-1] != [4,4]:
if up(lo):
lo = route_stack[-1]
continue
if down(lo):
lo = route_stack[-1]
continue
if left(lo):
lo = route_stack[-1]
continue
if right(lo):
lo = route_stack[-1]
continue
route_stack.pop()
lo = route_stack[-1]
print route_stack
執(zhí)行結(jié)果如下:

題目出處有另一種解題思路,但是我覺得有點(diǎn)煩,自己的這個(gè)比較好理解點(diǎn),實(shí)現(xiàn)起來也比較方便。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PyQt轉(zhuǎn)換路徑中的斜杠(斜杠(/)與反斜杠(\)轉(zhuǎn)換)
本文主要介紹了PyQt轉(zhuǎn)換路徑中的斜杠(斜杠(/)與反斜杠(\)轉(zhuǎn)換),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python調(diào)用DeepSeek?API的案例詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了以?Python?為例的調(diào)用?DeepSeek?API?的小白入門級(jí)詳細(xì)教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-02-02
Python?設(shè)計(jì)模式創(chuàng)建型單例模式
這篇文章主要介紹了Python?設(shè)計(jì)模式創(chuàng)建型單例模式,即Singleton,單例是一種設(shè)計(jì)模式,應(yīng)用該模式的類只會(huì)生成一個(gè)實(shí)例,下文詳細(xì)介紹需要的小伙伴可以參考一下2022-02-02
Python 棧實(shí)現(xiàn)的幾種方式及優(yōu)劣詳解
這篇文章主要為大家介紹了Python 棧實(shí)現(xiàn)的幾種方式及優(yōu)劣詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
python使用django調(diào)用deepseek api搭建ai網(wǎng)站
DeepSeek是一家人工智能公司,致力于通過創(chuàng)新的技術(shù)和算法,推動(dòng)人工智能領(lǐng)域的發(fā)展,本文給大家介紹了python使用django調(diào)用deepseek api搭建ai網(wǎng)站,文中有相關(guān)的代碼示例供大家參考,感興趣的小伙伴跟著小編一起來看看吧2025-02-02
python和php學(xué)習(xí)哪個(gè)更有發(fā)展
在本篇內(nèi)容里小編給大家分析了關(guān)于python和php學(xué)習(xí)哪個(gè)更有發(fā)展相關(guān)論點(diǎn),有興趣的朋友們參考下。2020-06-06

