時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。
這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n*m個小格仔組成。有的格仔可以正常走,標為』.』;有的格仔有陷阱不能走,標為『#』;有的格仔比較特殊,標為『*』,可以向周圍八個方向可走的格仔走一格;目的地標記為『@』。菜菜從左上角處開始,並且可以按中國象棋中的馬和象的方式或者特殊格的八方向來走。如果按照最短的路徑到達目的地,則可以獲得獎勵。
菜菜當然想獲得獎勵啦,於是就來找你幫忙,請你幫忙計算最少需要多少步。
輸入描述 input description
第一行,兩個正整數n,m。
接下來的n行m列描述了地圖。
輸出描述 output description
乙個整數,表示所要走的最小步數。若無法到達目的地則輸出-1。
樣例輸入 sample input
11 10
樣例輸出 sample output
5 (題目樣例有問題)
資料範圍及提示 data size & hint
對於20%的資料,保證0<n,m≤20
對於100%的資料,保證0<n,m≤200
分析:首先一定要讀題,讀懂題(語文不好,啥也白搭),原以為你每個點可以跳馬跳象,然後一般的還可以上下左右,*還點則八方位走,所以80!!!總是有答案。
第二遍以為只有一般的點可以跳馬跳象,*點只能八方位走,最後我終於明白,所有的點都可以跳馬跳象,而*點還能八方位走。orz
bfs搜尋
1 #include2 #include3 #include4using
namespace
std;56
const
int maxn = 210;7
struct
nodecur,nxt;
10char
mp[maxn][maxn];
11int bx[8] = ,by[8] = ;
12int dx[12] = ,dy[12] = ;
13bool
v[maxn][maxn];
14int
n,m;
15 queueq;
1617
void
bfs()
1827
while (!q.empty())
2841 nxt.x = xx;nxt.y = yy;nxt.step = cur.step+1
;42 v[xx][yy] = true;43
q.push(nxt);44}
45}46if (mp[cur.x][cur.y]=='*'
)47for (int i=0; i<8; ++i)
4857 nxt.x = xx;nxt.y = yy;nxt.step = cur.step+1
;58 v[xx][yy] = true;59
q.push(nxt);60}
61}62}
63 printf("-1"
);64}65
intmain()
66
Codevs 2855 遊樂園的迷宮
時間限制 1 s 空間限制 128000 kb 題目等級 gold 迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有...
codevs 2855 遊樂園的迷宮 bfs
迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有陷阱不能走,標為 有的格仔比較特殊,標為 可以向周圍八個方向可走的格...
CODE 遊樂園的迷宮
題目 題目描述 description 迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有陷阱不能走,標為 有的格仔比...