python 洪水
題目描述
在一個nxm矩陣形狀的城市里爆發了洪水,洪水從(0,0)的格子流到這個城市,在這個矩陣中有的格子有一些建筑,洪水只能在沒有建筑的格子流動。請返回洪水流到(n - 1,m - 1)的最早時間(洪水只能從一個格子流到其相鄰的格子且洪水單位時間能從一個格子流到相鄰格子)。
給定一個矩陣map表示城市,其中map[i][j]表示坐標為(i,j)的格子,值為1代表該格子有建筑,0代表沒有建筑。同時給定矩陣的大小n和m(n和m均小于等于100),請返回流到(n - 1,m - 1)的最早時間。保證洪水一定能流到終點。
一開始博主參考下面這篇博客寫了一段python的代碼
https://blog.csdn.net/weixin_37781578/article/details/89745288
首先語法沒有錯誤,但是就是不通過樣例,希望各位路過的大佬能指點一二!!!
然后看了一下下面那個通過的代碼
# -*- coding:utf-8 -*-class Flood:#計算洪水到達最短時間#洪水可以從四個方向流進來,也就是可以從所有的鄰居節點到達#廣度優先遍歷#必須要借助一個隊列,來存儲point,直接用(i,j)來表示#要有一個獲取鄰居節點函數(避開有建筑的點)#distance 字典,用來存儲(0,0)到達該節點的距離def floodFill(self, tmap, n, m):# write code here#self.m = mself.n = nself.tmap = tmapqueue = []distance = {}distance[(0,0)] = 0while queue:pop_point = queue.pop()for point in self.graph_Neighbor(pop_point):if point not in distance:queue.append(point)distance[point] = distance[pop_point]+1return m+n-2def graph_Neighbor(self, p):neighbor = []i = p[0]j = p[1]if 0<=i-1<n and self.tmap[i-1, j]==0:neighbor.append((i-1, j))if 0<=i+1<n and self.tmap[i+1, j]==0:neighbor.append((i+1, j))if 0<=j-1<n and self.tmap[i, j-1]==0:neighbor.append((i, j-1))if 0<=j+1<n and self.tmap[i, j+1]==0:neighbor.append((i, j+1))return neighbor嗯,感覺解釋的挺清楚的,但是queue不是一直為空嘛?這樣不就是相當于直接返回m+n-2嘛?你文字敘述的方法根本沒用上好嘛。雖然我知道最終答案是這個,但似乎太沒技術含量了?然后我把之前寫的代碼中的隊列換成了列表
#import queue # -*- coding:utf-8 -*- class Flood:def floodFill(self, tmap, n, m):i , j = 0 , 0x = []y = []x.append(0)y.append(0)#x = queue.Queue()#y = queue.Queue()#x.put(0)#y.put(0)#tmap[0][0] = 0while x :#i = x.get()#j = y.get()i = x.pop()j = y.pop()if i==n-1 and j==m-1 :return tmap[i][j]elif i<n-1 and tmap[i+1][j]==0 :#x.put(i+1)#y.put(j)x.append(i+1)y.append(j)tmap[i+1][j] = tmap[i][j]+1elif j<m-1 and tmap[i][j+1]==0 :#x.put(i)#y.put(j+1)x.append(i)y.append(j+1)tmap[i][j+1] = tmap[i][j]+1return tmap[i][j]?然后通過了,通過了。。。
嗯,看來之前的隊列確實用錯了。。。希望各位大佬能指點一二。。。
?
總結
- 上一篇: 传统家电在智能家居变革的五大优势
- 下一篇: 后台运行python程序 遇到缓冲区问题