poj3984迷宮問題解題報告

2021-06-13 15:50:46 字數 2086 閱讀 2969

問題描述:

迷宮問題

time limit:1000ms

memory limit:65536k

total submissions:3577

accepted:2093

description

定義乙個二維陣列:

int maze[5][5] = ;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

input

乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。

output

左上角到右下角的最短路徑,格式如樣例所示。

sample input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

sample output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

演算法與資料結構:

本題不需要特別的資料結構,按照本來的棋盤儲存即可。

演算法非常簡單,最標準的款搜。這裡簡單講一下bfs:

bfs全稱是breadth first search,顧名思義按照寬度優先搜尋。寬度是跟深度相對的,決策的次數就是深度,而同一次決策的各種情況則為寬度(這只是一種形象的說法,標準定義大家去問《導論》吧~)。為了實現bfs,我們需要構造乙個佇列,將新的決策不斷加入對位,每次需要搜尋下乙個決策時,彈出隊頭。為什麼這樣的結構能夠搜尋到最優解,大家可以自己研究研究~~^_^。對於本題,我們可以預先做些事情,比如處理好四個方向座標的改變量,下面**中大家就會看到。當然,如果直接強行的搜,大概可以到4^25這個數量級。我們可以看一下題目,注意到,在佇列中,乙個格仔只能夠出現一次,如果某格仔在隊中第二次出現的話,可以證明,著一定不是最優解。在搜尋時,只要格仔入隊,就把它的值變為「1」。

course code:

#include

using namespace std;

int di[4][2]=,,,}; //四個方向上的值

int maze[7][7],dui[1000000][3],h,t;//maze是迷宮,dui是佇列,完全不用開那麼大,dui[0]

//是x座標,dui[1]是y座標,dui[2]儲存父節點,h是

//頭指標,t是尾指標

int print(int a)

int main()

for (i=1;i<=4;i++)//搜尋四個方向進行決策

}

}

return 0;

}

POJ3984 迷宮問題

題目 迷宮問題 time limit 1000ms memory limit 65536k total submissions 3183 accepted 1861 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎...

POJ 3984 迷宮問題

一道比較簡單的bfs題 include include include include define max 6 using namespace std int map max max px max max py max max int movex 4 movey 4 bool vis max ma...

POJ 3984 迷宮問題

迷宮問題 time limit 1000ms memory limit 65536k total submissions 7047 accepted 4123 description 定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,...