1293 網格中的最短路徑

2021-10-16 17:13:39 字數 2728 閱讀 9874

題目:

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...