bfs 思路 hrbust院賽初賽D

2021-08-13 13:48:16 字數 1402 閱讀 1082

逃脫

時間限制: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陣列,標記狀態是否被訪問過。將狀態用乙個整數表示,整數則可以是陣列下標,該陣列下標對應的陣列元素的值即是狀態是否被訪問的標誌。...