題目描述
小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。
最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。
吃豬遊戲很簡單,給定乙個地圖,大小為n*m,在地圖中會隨機出現乙個火山口,只要小樂樂能逃離這個地圖,他便能吃豬!
但吃雞遠沒有那麼簡單:
1.小樂樂每走一次只能上下左右四個方向中走一步。
2.小樂樂每走一步,火山噴發的岩漿就會向四周蔓延乙個格仔,所有岩漿走過的地方都視為被岩漿覆蓋。
3.小樂樂碰到岩漿就會死。
4.地圖中還有很多障礙,使得小樂樂不能到達,但是岩漿卻可以把障礙融化。
5.小樂樂只有走到題目給定的終點才算遊戲勝利,才能吃豬。
小樂樂哪見過這場面,當場就蒙了,就想請幫幫他,告訴他是否能吃豬。
輸入描述:
多組樣例輸入
第一行給定n,m,(1 <= n, m <= 1000)代表地圖的大小。
接下來n行,每一行m個字元,代表地圖,對於每乙個字元,如果是'.',代表是平地,'s'代表小樂樂起始的位置,
'e'代表終點,'#'代表障礙物,'f'代表火山口。
輸出描述:
輸出只有一行。如果小樂樂能吃豬,輸出"pig pig pig!"。否則輸出"a! wo si la!"。
示例1
輸入
3 3
f..#s#
#.e
輸出
pig pig pig!
思路:
兩個bfs,注意下細節即可。。。
**:#include using namespace std;
struct node;
int dx[5]=,n,m;
int dy[5]=;
char a[1001][1001];
int vis[1001][1001];
int footstep[1001][1001];
int bfs(int startx,int starty){
dequeq;
node start;
start.x = startx;
start.y = starty;
start.foot = 0;
vis[startx][starty] = 1;
q.push_back(start);
while(!q.empty()){
node now = q.front();
q.pop_front();
// printf("x=%d y=%d foot = %d\n",now.x,now.y,now.foot);
for(int i = 0; i < 4; i++){
int x = now.x+dx[i];
int y = now.y+dy[i];
if(x>=0&&x=0&&yq;
node start;
start.x = startx;
start.y = starty;
start.foot = 0;
footstep[startx][starty] = 0;
vis[startx][starty] = 1;
q.push_back(start);
while(!q.empty()){
node now = q.front();
q.pop_front();
for(int i = 0; i < 4; i++){
int x = now.x+dx[i];
int y = now.y+dy[i];
if(x>=0&&x=0&&y如果有寫的不對或者不全面的地方 可通過主頁的****進行指正,謝謝
哈理工院賽 小樂樂搭積木
題目描述 小樂樂想要給自己搭建乙個積木城堡。積木城堡我們假設為n m的平面矩形。小樂樂現在手裡有12,21兩種地磚。小樂樂想知道自己有多少種組合方案。輸入描述 第一行輸入整數n,m。1 n,m 10 輸出描述 輸出組合方案數。示例1 輸入2 3輸出 3示例2 輸入1 3輸出 0示例3 輸入2 5輸出...
哈理工院賽 小樂樂玩木桶
題目描述 小樂樂用散落在森林裡的木板做了乙個木桶。已知底面積為s 小樂樂經過各種儀器的精密測量知道了,所有木板的近似長度h i 小樂樂只能選用三塊木板去拼木桶,小樂樂拼湊成的木桶的最大裝水體積是 容量測量,底面積乘高,木桶不傾斜 輸入描述 第一行輸入整數n,s。3 n 1000,1 s 1000,n...
哈理工院賽 小樂樂學博弈
題目描述 小樂樂和小皮蛋開始學習關於博弈的知識。給定兩堆石子,第一堆有n個石子,第二堆有m個石子。每次操作可以從一堆石子中拿走一些石子,拿走石子的數量可以是1 k個,小樂樂先手拿石子,然後依次輪流。假如到小樂樂的輪次,小樂樂拿不了了 也就是所有的石子都被拿光了 那麼小皮蛋就獲勝,反之亦然。假設小樂樂...