題目描述
小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。
最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。
吃豬遊戲很簡單,給定乙個地圖,大小為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!"。
輸入
3 3
f..#s#
#.e
輸出。
pig pig pig!
題解:
入門bfs 分別記錄 起始位置,火的位置,終止位置,bfs跑即可
但是在判斷條件上加上abs(next.x-f.x)+abs(next.y-f.y)>next.time
其中 next.x表示下一步的橫座標,next.y表示下一步的縱座標 next.step 表示走過步數(也可以理解為時間)
只需要火山與人的距離大於火山蔓延的步數即可 (也可以想象成乙個人去追擊另乙個人)這兩個人之間的距離要大於追擊人走的距離
#include typedef long long ll;
using namespace std;
const int mx = 1e9+5;
#define ms(a,b) memset(a,b,sizeof(a))
int n,m;
char maze[1005][1005];
int vis[1005][1005];
int dir[4][2]= ;
struct node
s,f,e;
int bfs()}}
return 0;
}int main()
}if(bfs())cout<<"pig pig pig!"
return 0;
}
牛客小樂樂打遊戲
題意 原文中文題意就不說了 題解 重點就是處理人每走一步,火山蔓延一層,怎麼控制這個關係,實驗室大佬看完題後,求火山口與人將走的點的曼哈頓距離有關 畫畫圖就是這樣。所以在bfs列舉四個方向的時候考慮下火山蔓延層數即可。include define ll long long using namespa...
哈理工院賽 小樂樂打遊戲
題目描述 小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。吃豬遊戲很簡單,給定乙個地圖,大小為n m,在地圖中會隨機出現乙個火山口,只要小樂樂能逃離這個地圖,他便能吃豬!但吃雞遠沒有那麼簡單 1.小樂樂每走一次只能上下左右四個方向...
小樂樂打遊戲(兩次BFS 一次BFS加特殊判斷)
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 小樂樂覺得學習太簡單了,剩下那麼多的時間好無聊,於是便想打遊戲。最近新出了乙個特別火的遊戲,叫吃豬,小樂樂準備玩一玩。吃豬遊戲很簡單,給定乙個地圖,大小為n ...