題目:
1293. 網格中的最短路徑鏈結
思路:
這題我們可以採用bfs和dfs來做,首先我們需要明白bfs由於相當於沒有回溯的過程,因此bfs是不需要遍歷完所有節點就可以找到到目的的最短路徑,但是由於dfs有借助於回溯的思想,因此是需要遍歷完所有節點才可以知道最短路徑長度。
方法一bfs:思路
首先,我們採用seen這個二維的vector裡面存放著從起始點以相同的步數走到當前位置過程中,這個位置存放的最小的障礙obstacle數目(由於後面做了剪枝,因此只要obstacle數目》k ,我們就認為當前存放的obstacle=int_max),
我們知道借助佇列進行bfs的第一步是放入乙個位置到佇列中,下列**
qu.
push()
;//start_i,start_j,obstaclenumbers
第乙個,和第二個0代表起始位置 start_i,start_j,第****其實的障礙數目,由於題目中有grid[0][0] == grid[m-1][n-1] == 0 可以知道最開始的起始位置是沒有障礙物的,因此obstaclenumbers=0;
我認為這道題是關於消除障礙的bfs重要的第二步,和以往的bfs中的used中的不同(普通的迷宮問題可以根據used判斷是否可以走)。
下列**
if
(isarea
(grid,temp_i,temp_j)))
; seen[temp_i]
[temp_j]
=newobstacle;
}}
當我們發現newobstacle方法二dfs:思路 leetcode會超時dfs其實就是傳入變數時有 k 這個k代表還剩多少次可以消除障礙的機會。因此這樣的話在dfs我們需要注意
沒有障礙時(grid[temp_i][temp_j] == 0)可以直接dfs,
有障礙時(grid[temp_i][temp_j] == 1)
if
(grid[temp_i]
[temp_j]==0
)if(k >
0&& grid[temp_i]
[temp_j]==1
)
**:方法一:bfs
class
solution,,
,};bool
isarea
(vector
int>>
& grid,
int temp_i,
int temp_j)
public
:int
shortestpath
(vector
int>>
& grid,
int k));
//start_i,start_j,obstaclenumbers
while
(!qu.
empty()
)for
(int j=
0;jsize()
;j++))
; seen[temp_i]
[temp_j]
=newobstacle;}}
}}step++
;//隨著每次佇列向外面擴充套件一次,步數也會加一
}return-1
;}};
方法二dfs:思路 leetcode會超時
class
solution,,
,};bool
isarea
(vector
int>>
& grid,
int&temp_i,
int&temp_j)
void
dfs(vector
int>>
&grid, vector
bool
>>
&used,
int current_i,
int current_j,
int&k,
int&step)
for(
int i=
0;isize()
;i++)if
(k >
0&& grid[temp_i]
[temp_j]==1
) step--
; used[temp_i]
[temp_j]
=false;}
}}public
:int
shortestpath
(vector
int>>
& grid,
int k)
};
1293 網格中的最短路徑
給你乙個 m n 的網格,其中每個單元格不是 0 空 就是 1 障礙物 每一步,您都可以在空白單元格中上 下 左 右移動。如果您 最多 可以消除 k 個障礙物,請找出從左上角 0,0 到右下角 m 1,n 1 的最短路徑,並返回通過該路徑所需的步數。如果找不到這樣的路徑,則返回 1。dp陣列儲存的不...
leetCode 1293 網格中的最短路徑
定義乙個陣列記錄已經走過的網格 k math.min k,m n 3 boolean visited newboolean m n k 1 使用佇列儲存當前能走的網格座標的狀態 queue queue newlinkedlist queue.offer new nagoto 0 0,k int st...
GIS中的最短路徑
前段時間,在mapx上用vb實現了最短路徑的演算法。具體思路是,先在mapx上建立拓樸關係,將拓樸儲存到資料庫中,在分析路徑的時候從資料庫中載入拓樸關係,然後運用dijkstra演算法找出最短路徑。這裡面可能有兩個難點 1 如何快速建立拓樸關係。這裡面又可細分為如何組織拓樸結構 如何建立拓樸關係。2...