python 迷路的機械人

2021-10-24 08:12:07 字數 2260 閱讀 3703

設想有個機械人坐在乙個網格的左上角,網格 r 行 c 列。機械人只能向下或向右移動,但不能走到一些被禁止的網格(有障礙物)。設計一種演算法,尋找機械人從左上角移動到右下角的路徑。網格中的障礙物和空位置分別用 1 和 0 來表示。

返回一條可行的路徑,路徑由經過的網格的行號和列號組成。左上角為 0 行 0 列。如果沒有可行的路徑,返回空陣列。

示例 1

:輸入:[[

0,0,

0],[

0,1,

0],[

0,0,

0]]輸出:[[

0,0]

,[0,

1],[

0,2]

,[1,

2],[

2,2]

]解釋:

輸入中標粗的位置即為輸出表示的路徑,即

0行0列(左上角) -

>

0行1列 -

>

0行2列 -

>

1行2列 -

>

2行2列(右下角)

說明:r 和 c 的值均不超過 100。

思路:

1、判斷不能到達的點的條件

2、用陣列存放該點是否可以到達

3、從終點倒推路徑再翻轉

class

solution

:def

pathwithobstacles

(self, obstaclegrid: list[list[

int]])

-> list[list[

int]]:

ans =

#行數和列數

m =len(obstaclegrid)

n =len(obstaclegrid[0]

)#如果行或列為0或起點或者終點是障礙物,直接返回ans

if m ==

0or n ==0:

return ans

if obstaclegrid[0]

[0]or obstaclegrid[m-1]

[n-1]:

return ans

#初始化陣列,1為可到達,0為不可到達

mn =[[

1for _ in

range

(n)]

for _ in

range

(m)]

#更新首行點是否能到達

for i in

range(1

,n):

if obstaclegrid[0]

[i]==1:

mn[0]

[i]=

0else

: mn[0]

[i]= mn[0]

[i-1

]#更新首列點是否能到達

for i in

range(1

,m):

if obstaclegrid[i][0

]==1:

mn[i][0

]=0else

: mn[i][0

]= mn[i-1]

[0]#更新中間的點

for i in

range(1

,m):

for j in

range(1

,n):

if obstaclegrid[i]

[j]==1:

mn[i]

[j]=

0else

: mn[i]

[j]=

max(mn[i-1]

[j],mn[i]

[j-1])

if mn[-1

][-1

]==0:

return ans

#倒推路徑

i = m-

1 j = n-

1while i or j:

[i,j]

)if j ==0:

i -=

1elif i ==0:

j -=

1else

:if mn[i-1]

[j]>=mn[i]

[j-1]:

i -=

1else

: j -=1[

0,0]

) ans.reverse(

)return ans

面試題 08 02 迷路的機械人

設想有個機械人坐在乙個網格的左上角,網格 r 行 c 列。機械人只能向下或向右移動,但不能走到一些被禁止的網格 有障礙物 設計一種演算法,尋找機械人從左上角移動到右下角的路徑。具體python 如下 class solution def pathwithobstacles self,obstacle...

機場迷路不用怕,Spencer機械人來幫你

解決機場迷路的小妙招我有spencer。通常在陌生的大型機場人們會很容易迷失方向,無論是取票的地方 辦理託運的地方或者安檢及其他地方,偌大的機場都會讓人們無助甚至怕錯過航班感到抓狂。工作人員的指示也總是雲裡霧裡讓人琢磨不明白。不過如果有人能指引你正確的地方去到你想去的方位,最好是他們真的可以帶你去,...

好色機械人的豔遇 機械人豔遇 《機械人的旅行》

講述機械人 路遇開房車的 剛剛開始的時候畫風很舒服,直到到了晚上上了她的床之後。畫風速變了!這個女主角聲音超好聽。整個情節實在太流氓了,太猥瑣了!連六六君這樣的老司機都看不下去了!正片在三分五十,不謝 很抱歉,此內容已經失效了!就連六六君也無法恢復了。請欣賞其他有效的內容 當您看到這條資訊的時候,很...