貪心演算法 迷宮最短路徑

2022-05-19 06:56:36 字數 1677 閱讀 7286

description

為了測試某種藥物對小白鼠方向感的影響,生物學家在實驗室做了乙個矩形迷宮,入口和出口都確定為唯一的,且分布在矩形的不同邊上。現在讓你算出小白鼠最短需要走多少步,才可以從入口走到出口。

input

共n+1

行,第一行為n(

n=0表示輸入結束),以下n行

n列0-1矩陣,

1表示不能通過,0表示可以通過(左上角和右下角為0

,即入口和出口),其中n<30。

output

只有乙個數,為最少要走的格仔數。0

表示沒有路徑。

sample input

5

0 1 1 1 1

0 0 1 1 1

1 0 0 0 1

1 1 1 0 1

1 1 1 0 0

40 0 1 1

0 0 0 1

1 1 1 1

1 1 1 0

0

sample output

9

0解題思路:

貪心演算法:1.用乙個結構體儲存衡中座標、當前步數。

2.讀取起點,此時步數step為1,分別向四個方向讀取可探索的點,step++併入隊

3.此時的點出隊,然後繼續同樣的方法判斷下乙個點

4.這樣的方法下判斷第乙個讀到出口的就是最短路徑。

5.隊列為空還是沒有讀到出口,則沒有路徑。

實現**:

#include#include

using

std::cin;

using

std::cout;

using

std::endl;

using

std::queue;

struct

point ;

intmain()

maze[

0][0] = 1; //

讀取起點,並放入佇列

tmp.x = tmp.y = 0

; tmp.step = 1

; q.push(tmp);

while(!q.empty())

if (tmp.y - 1 >= 0 && !maze[tmp.x][tmp.y - 1])

if (tmp.x + 1

< n && !maze[tmp.x + 1][tmp.y])

if (tmp.y + 1

< n && !maze[tmp.x][tmp.y + 1])

q.pop();

//當前所處出隊,繼續下一步判斷

}

if (tmp.x == n - 1 && tmp.y == n - 1)//

若讀取到出口,輸出當前步數

cout << q.front().step

cout

<< "0"

<}

}

(本博文或多或少參考過其他網上資料,但時間已久忘記當初的參考了,在此對他們表示感謝!)

貪心演算法《最短路徑》

題目大意 存在幾個城市1 n 每個城市任意連向其他城市。並且,路程也是不盡相同的。若從乙個城市出發,去各個城市,則去各個城市每乙個城市的最短路程計算出來。如下是幾個城市的地圖 題目分析 乙個城市可能有多個路徑,但是尋找最小的路徑卻不容易。演算法 貪心演算法 從1城市出發,到達4和5城市最小路徑的充分...

python貪心演算法最短路徑 貪心演算法《最短路徑》

題目大意 存在幾個城市1 n 每個城市任意連向其他城市。並且,路程也是不盡相同的。若從乙個城市出發,去各個城市,則去各個城市每乙個城市的最短路程計算出來。如下是幾個城市的地圖 題目分析 乙個城市可能有多個路徑,但是尋找最小的路徑卻不容易。演算法 貪心演算法 從1城市出發,到達4和5城市最小路徑的充分...

最短路徑純貪心演算法。

dijkstra演算法,書上其實說的很簡潔,仔細看,仔細思考是會理解的.但要先理解幾條引論和推理.而自己思考的思路在不需要任何推理只從貪心思路出發,和dijkstra有所不同,但本質一樣,那麼自己按照理解,試著慢慢講下.一,問題 從某個源點,到其他各點的最短路徑.注意,不要想成某乙個點,到某個點的最...