HHUOJ 1896 營救小明

2021-09-24 13:45:33 字數 1434 閱讀 4255

一天,小明夢見自己被外星人抓走了,他被關在了一座監獄裡,這座監獄形如n*m(n,m<=200)的矩陣,監獄裡有牆、道路和守衛。

小明的小夥伴們得知他被外星人抓走後想要把他救出來,他們要試圖接近關押小明的那間房間。當他們經過有守衛的房間時他們必須乾掉守衛後繼續前進,而當遇到牆的時候則只能繞道。他們只能向上下左右四個方向移動,每移動一次耗時1分鐘,乾掉乙個守衛也耗時1分鐘。不必擔心,他們足夠強壯,可以乾掉任何乙個守衛。

現在請你計算出他們當中最快到達小明所在房間的那個人最短需要花費多長時間。

輸入包含多組測試資料。

每組輸入的第一行是兩個整數n和m(n,m<=200)。

接下來n行,每行輸入m個字元。「.」代表道路,可以通行。「#」代表牆。「g」代表守衛。「m」代表小明所在的房間。「f」代表每乙個小明的小夥伴,可能有多個小夥伴一起來救他。

對於每組輸入,輸出小夥伴當中最快到達小明所在房間的那個人最短需要花費多長時間。如果所有小夥伴都無法到達小明所在的房間的話,請輸出「poor xiaoming」(引號不輸出)。

7 8

#.#####.

#.m#..f.

#..#g...

..#..#.#

#...##..

.#......

........

13
因為是輸入多組資料,用stl的queue會mle,所以要用陣列表示佇列,結構體陣列也可以,ac**如下:

#include

using namespace std;

int n,m;

int mo[4]

[2]=

;//不能這麼定義int mo[4][2]=,,,};因為這個奇葩問題我wa了無數次,靠!

char ma[

205]

[205];

int q[

40000][

2];int step[

205]

[205];

void

bfs(

int x,

int y)

for(

int i=

0;i<

4;i++

)else

q[tail][0

]=x2;

q[tail][1

]=y2;

tail++;}

} head++;}

if(ans==0)

printf

("poor xiaoming\n");

else

printf

("%d\n"

,ans);}

intmain()

}for

(int i=

0;i}}

return0;

}

HHUOJ 1359 統計方案

在一無限大的二維平面中,我們做如下假設 1 每次只能移動一格 2 不能向後走 假設你的目的地是 向上 那麼你可以向左走,可以向右走,也可以向上走,但是不可以向下走 3 走過的格仔立即塌陷無法再走第二次。求走n步不同的方案數 2種走法只要有一步不一樣,即被認為是不同的方案 首先給出乙個正整數c,表示有...

189 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,...

189 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。說明 class solution def rotate self,nums list int k int none do not return anything,modify nums in place instead.n le...