Codevs 2855 遊樂園的迷宮

2021-07-28 20:40:15 字數 3100 閱讀 9800

時間限制: 1 s    

空間限制: 128000 kb    

題目等級 : ** gold

迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。

這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n*m個小格仔組成。有的格仔可以正常走,標為』.』;有的格仔有陷阱不能走,標為『#』;有的格仔比較特殊,標為『*』,可以向周圍八個方向可走的格仔走一格;目的地標記為『@』。菜菜從左上角處開始,並且可以按中國象棋中的馬和象的方式或者特殊格的八方向來走。如果按照最短的路徑到達目的地,則可以獲得獎勵。

菜菜當然想獲得獎勵啦,於是就來找你幫忙,請你幫忙計算最少需要多少步。

輸入描述 input description

第一行,兩個正整數n,m。

接下來的n行m列描述了地圖。

輸出描述 output description

乙個整數,表示所要走的最小步數。若無法到達目的地則輸出-1。

樣例輸入 sample input

11 10

..........

....#.....

..........

...#.*....

.......*..

..#..#...@

*.........

...#...#..

.....*....

...#......

..*....*..

樣例輸出 sample output

13 資料範圍及提示 data size & hint

對於20%的資料,保證0<n,m≤20

對於100%的資料,保證0<n,m≤200

50分**存檔:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define maxn 205

7int

n,m,dis[maxn][maxn],ex,ey;

8int dx=;

9int dy=;

10int bax=;

11int bay=;

12char

map[maxn][maxn];

13 queuestx,sty;

14bool

vis[maxn][maxn];

15bool judge(int xx,int

yy)20

void

bfs()33}

34}35else

if(map[nx][ny]=='*'

)43}44

}45}46

}47intmain()

4856 dis[1][1]=0;57

bfs();

58if(dis[ex][ey]==0x3f) printf("

-1\n");

59else printf("

%d\n

",dis[ex][ey]);

60return0;

61 }

ac**:

1 #include2 #include3

using

namespace

std;

4const

int maxn = 205;5

char

maze[maxn][maxn];

6int

n,m;

7int

dx,dy;

8bool

vis[maxn][maxn];

9struct

node ;

13bool is_raw(int x,int

y) 17

bool ok = false;18

int dir[24]= ;//象20

int spec[16] = ;//

九宮格21

int ans = 0;22

void bfs()

36q.pop();

37for(int i = 0 ; i < 24; i = i + 2

) 47}48

if(maze[head.x][head.y] == '*'

) 59}60

}61}62

}63intmain() 72}

73//

printf("目標是 %d %d\n",dx,dy);

74bfs();

75if(ok) printf("

%d\n

",ans);

76else cout<

<

77 }

//話說這題樣例有問題,被樣例坑了好長時間.......

再次ac**:

/*

再次ac**。。我日,我說咋回事嗎,我感覺我寫的也沒什麼

毛病就是不對挨!原來是題意理解錯誤 對於那些特殊的點既能夠

按照八方向來走 ,也能夠按照 普通點的 方向來走,剛開始寫的時候

把兩類點分開 寫的。。。

*/#include#include#include#includeusing namespace std;

#define maxn 205

int n,m,dis[maxn][maxn],ex,ey;

int dx=;

int dy=;

int bax=;

int bay=;

char map[maxn][maxn];

queuestx,sty;

bool vis[maxn][maxn];

bool judge(int xx,int yy)

void bfs()

}if(map[nx][ny]=='*')}}

}}int main()

dis[1][1]=0;

bfs();

if(dis[ex][ey]>=1500000) printf("-1\n");

else printf("%d\n",dis[ex][ey]);

return 0;

}

codevs 2855 遊樂園的迷宮 bfs

迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有陷阱不能走,標為 有的格仔比較特殊,標為 可以向周圍八個方向可走的格...

2855 遊樂園的迷宮

時間限制 1 s 空間限制 128000 kb 題目等級 gold 迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有...

CODE 遊樂園的迷宮

題目 題目描述 description 迷宮可是每個遊樂園必不可少的專案,菜菜當然是要嘗試一下啦。這個迷宮比較特殊。與其說是迷宮,倒不如說是乙個巨大的格仔。遊樂園給菜菜發了一張地圖,地圖上標明了,這個格仔由n行m列共n m個小格仔組成。有的格仔可以正常走,標為 有的格仔有陷阱不能走,標為 有的格仔比...