日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求最短通路值

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求最短通路值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:  

? ? ? ?給定一個整型矩陣matrix表示一個網絡,1代表有路,0代表無路,每一個位置只要不越界,都有上下左右四個方向,求從最左上角到最右下角的最短通路值。?
  例如,matrix為:?
  1 0 1 1 1?
  1 0 1 0 1?
  1 1 1 0 1?
  0 0 0 0 1?
  ?通路只有一條,由12個1構成,所以返回12。

基本思路:

  使用寬度優先遍歷即可。生成map矩陣,map[i][j]的含義是從位置(0, 0)走到位置(i, j)最短的路徑值。隊列rQ和cQ分別用于存放位置橫縱坐標,初始時將位置(0, 0)壓入隊列。?
  ?
  不斷的從隊列中彈出一個位置(r, c),然后看這個位置的上下左右哪個位置有路可走,即matrix中的值為1,將能走的位置的坐標壓入隊列中,同時設置好在map中的值,即map[r][c] + 1。在這個過程中,需要考慮下一個位置是否之前已經走過,這個情況可以根據map中的值進行判斷,如果下一個位置的map值不為0,那么說明之前已經走過,跳過即可。?
  ?
  一直重復上述步驟,直到遇到終點坐標,返回map中相應的值即可。如果rQ和cQ已經為空都沒有遍歷到終點位置,說明不存在這樣的一條路徑,返回0.?
  ?
  如果矩陣大小為N*M,這個過程的時間復雜度為O(M*N)
?

def minPathValue(m):if m == None or len(m) == 0 or len(m[0]) == 0 or m[0][0]!=1 or m[-1][-1]!=1:return #map_表示從(0,0)到每個點的距離map_ = [[0 for i in range(len(m[0]))] for i in range(len(m))]rQ = []cQ = []rQ.append(0)cQ.append(0)map_[0][0] = 0while len(rQ)!=0:row = rQ.pop(0)col = cQ.pop(0)if row == len(m)-1 and col == len(m[0])-1:return map_[row][col]pre = map_[row][col]walkTo(m,map_,row-1,col,rQ,cQ,pre)walkTo(m,map_,row+1,col,rQ,cQ,pre)walkTo(m,map_,row,col-1,rQ,cQ,pre)walkTo(m,map_,row,col+1,rQ,cQ,pre)return 0def walkTo(m,map_,row,col,rQ,cQ,pre):if row < 0 or row == len(m) or col < 0 or col == len(m[0]) or m[row][col]!=1 or map_[row][col]!=0:returnmap_[row][col] = pre + 1rQ.append(row)cQ.append(col)m = [[1,0,1,1,1],[1,0,1,0,1],[1,1,1,0,1],[0,0,0,0,1]] minPathValue(m)

?

總結

以上是生活随笔為你收集整理的求最短通路值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。