問題描述:
迷宮問題
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表示可以走的路,只能橫著走或豎著走,...