"""
其中標記為1的為障礙,標記為0的為可以通行的地方。
"""from pprint import pprint
# 讀取資料
data =
with
open
('maze.txt'
)as f:
lines = f.readlines(
)for line in lines::-
1])data_new =
for i in
range
(len
(data)):
)for j in
range
(len
(data[0]
)): data_new[i]
int(data[i]
[j])
)# pprint(data_new)
class
point
:def
__init__
(self, x, y)
: self.x = x
self.y = y
# 橫著的是width 豎著的是length
queue =
# 順時針 右、下、左、上
dx =[0
,1,0
,-1]
# 外層 length
dy =[1
,0,-
1,0]
# 內層 width
width =
len(data_new[0]
)length =
len(data_new)
dis =[[
-1for _ in
range
(width)
]for _ in
range
(length)
]# 生成距離(原點)矩陣
dis[0]
[0]=
0# d記起點距自己距離為0
begin = point(0,
0)end = point(length -
1, width -1)
pre =[[
none
for _ in
range
(width)
]for _ in
range
(length)
]# 當前點的上乙個點,用於輸出路徑軌跡
stack =
# 記錄路徑
defbfs
(maze:
list
, begin: point, end: point)
:global queue, seen, dx, dy, width, length, pre, stack
while queue:
# while len(queue) > 0:
vertex = queue.pop(0)
for i in
range(4
):nx, ny = vertex.x + dx[i]
, vertex.y + dy[i]
if width > ny >=
0and
0<= nx < length:
# 如果沒有過屆 if0
== data_new[nx]
[ny]
and dis[nx]
[ny]==-
1:# 如果在一行判斷可能會 index out of range
dis[nx]
[ny]
= dis[vertex.x]
[vertex.y]+1
# 即將訪問的點(的距離)等於上乙個點的距離 +1
)# 把該點加入佇列 準備下一次探索
pre[nx]
[ny]
= vertex # 記錄當前節點的上一節點
if nx == end.x and ny == end.y:
# 如果該點是終點, 那麼停止搜尋
break
while
true
:# 從終點前推
stack.insert(
0, end)
if end.x == begin.x and end.y == begin.y:
break
end = pre[end.x]
[end.y]
# print('路徑')
# while stack:
# curr = stack.pop()
# print((curr.x, curr.y))
bfs(maze=data_new, begin=begin, end=end)
defrdlu
(now: point,
next
: point)
:# 判斷走向的函式
ifnext
.x == now.x and
next
.y == now.y +1:
return
'r'if
next
.x == now.x and
next
.y == now.y -1:
return
'l'if
next
.x == now.x -
1and
next
.y == now.y:
return
'u'if
next
.x == now.x +
1and
next
.y == now.y:
return
'd'ans =
''for i in
range(1
,len
(stack)):
# print(rdlu(stack[i-1], stack[i]))
ans += rdlu(stack[i-1]
, stack[i]
)print
(ans,
'\n'
,len
(ans)
)
迷宮 藍橋 迷宮 BFS DFS
很久沒有認真的寫一道dfs和bfs的題了 今天早上這個題花了1個多小時,竟然還沒對。答案一直出錯,我都快崩潰了,那麼簡單的題。我tm 晚上又重寫了一遍,答案對了。但是還是不知道為什麼早上的錯了。也沒留備份。include include include using namespace std con...
迷宮 藍橋初賽
下圖給出了乙個迷宮的平面圖,其中標記為1 的為障礙,標記為0 的為可以通行的地方。010000 000100 001001 110000 迷宮的入口為左上角,出口為右下角,在迷宮中,只能從乙個位置走到這個它的上 下 左 右四個方向之一。對於上面的迷宮,從入口開始,可以按drrurrdddr 的順序通...
藍橋杯之迷宮
請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多餘的內容。思路 本來想的是類似求解迷宮問題的深搜,發現它無法遍歷每個點,還不如兩層迴圈來得快,判斷每個點,然後用深搜,每走一步標記陣列對應值改變為 1,超出邊界符合題意,移動到標記陣列值為 1 則表示兜圈子,直到所有點判斷結束。include us...