逃脫
時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
64bit io format: %lld
這是mengxiang000和tabris來到幼兒園的第四天,幼兒園老師在值班的時候突然發現幼兒園某處發生火災,而且火勢蔓延極快,老師在第一時間就發出了警報,位於幼兒園某處的mengxiang000和tabris聽到了火災警報聲的同時拔腿就跑,不知道兩人是否能夠逃脫險境?
幼兒園可以看成是乙個n*m的圖,在圖中一共包含以下幾種元素:
「.」:表示這是一塊空地,是可以隨意穿梭的。
「#」:表示這是一塊牆,是不可以走到這上邊來的,但是可以被火燒毀。
「s」:表示mengxiang000和tabris所在位子。
「e」:表示幼兒園的出口。
「*」表示火災發源地(保證輸入只有乙個火災發源地)。
已知每秒有火的地方都會向周圍八個格仔(上下左右、左上、右上、左下、右下)蔓延火勢.mengxiang000和tabris每秒都可以選擇周圍四個格仔(上下左右)進行移動。(假設兩人這一秒行動完之後,火勢才蔓延開)
根據已知條件,判斷兩人能否成功逃脫險境,如果可以,輸出最短逃離時間,否則輸出t_t。
第一行輸入乙個整數t,表示一共的測試資料組數。第二行輸入兩個整數n,m,表示幼兒園的大小。
接下來n行,每行m個字元,表示此格仔是什麼元素。
t<=200
3<=n<=30
3<=m<=30
保證圖中有乙個起點,乙個出口,乙個火災源處.
為了防止孩子們嬉戲中受傷,牆體是橡膠製作的,可以燃燒的哦。
每組資料輸出一行,如果兩人能夠成功到達出口,那麼輸出最短逃離時間,否則輸出t_t基礎bds 加 預處理出火到達的時間 , 注意特殊情況只有到達出口時 火可以和人同時到達#include#include#include#includeusing namespace std;
int n,m;
int vis[35][35];
char map[35][35];
int fire[35][35];
struct node;
int min(int a,int b)
int xx[4][2] = ;
int judge(int x, int y)
if(fire[u.x][u.y] == u.step) continue; //特殊情況,火和人同時到達時
for(int i = 0 ;i < 4; i++)
{ v = u;
v.x += xx[i][0];
v.y += xx[i][1];
v.step += 1;
if(v.x>=0 && v.y>=0 && v.x
院賽院賽院賽
新生時期的最後一場比賽結束了 北京之行之前 淞淞然然就表示這次不參加 放我去新生區掌控雷電 比賽前一天看了眼最後的報名列表 只要沒有同學夢回巔峰 新生前三拿優盤我還是可以的 嗯 然後極其浪的看了婦聯2 一點都不怕影響比賽情緒 十二點就睡了 第二次醒來.9 47.這時候該用什麼樣的表情.迅速穿好衣服 ...
HRBUST 1613 迷宮問題 (bfs)
題幹 小z身處在乙個迷宮中,小z每分鐘可以走到上下左右四個方向的相鄰格之一。迷宮中有一些牆和障礙物。同時迷宮中也有一些傳送門,當小z走到任意乙個傳送門時,可以選擇傳送到其他任意的傳送門 傳送是不花費時間的 當然也可以停留在原地。現在小z想知道走出迷宮需要花費的最少時間。input 輸入第一行為組數t...
bfs思路總結
1 將初始狀態加入佇列 2 初始狀態出隊,進行節點擴充套件。可能是狀態轉移,列出狀態轉移方程 3 在進行擴充套件中,需要判斷節點不要重複擴充套件。基本思路是設立visited陣列,標記狀態是否被訪問過。將狀態用乙個整數表示,整數則可以是陣列下標,該陣列下標對應的陣列元素的值即是狀態是否被訪問的標誌。...