SDAU 搜尋專題 10 Catch him

2021-07-11 00:28:04 字數 2264 閱讀 8930

1:問題描述

problem description

在美式足球中,四分衛負責指揮整隻球隊的進攻戰術和跑位,以及給接球員傳球的任務。四分衛是乙隻球隊進攻組最重要的球員,而且一般身體都相對比較弱小,所以通常球隊會安排5-7名大漢來保護他,其中站在四分衛前方、排成一線的5名球員稱為進攻鋒線,他們通常都是135公斤左右的壯漢。

對防守方來說,攻擊對手的四分衛當然是最直接的限制對手進攻的方法。如果效果好,就可以在對方四分衛傳球之前將其按翻在地,稱之為擒殺。擒殺是最好的鼓舞防守隊士氣的方法,因為對方連傳球的機會都沒有,進攻就結束了,還必須倒退一些距離開球。**的擒殺甚至能夠將對方的四分衛弄傷,從而迫使對方更換這個進攻核心。

在本題中,輸入給出準備擒殺四分衛的防守球員的位置、對方每個進攻鋒線球員的位置以及對方四分衛的位置,你的任務是求出這名準備擒殺的防守球員至少要移動多少步,才能夠擒殺對方四分衛。

假設對方進攻鋒線和四分衛在這個過程中都不會移動。只有1名防守球員,防守球員只要碰到對方四分衛就算擒殺。

所有的球員都是一塊連續的、不中空的2維區域。防守球員不可以從進攻鋒線的身體上穿過,也不可以從界外穿過(只能走空地)。

防守隊員不可以轉動身體,只能平移。防守隊員的身體所有部分向同乙個方向(上、下、左、右)移動1格的過程叫做1步。

input

輸入包含多組資料。每組資料第一行都是兩個整數h,w(0< h,w<=100),表示整個區域的高度和寬度,h=w=0表示輸入結束。接下來有h行,每行w個字元。每個字元如果是』.』,表示這裡是空地,如果是』o』,表示是進攻鋒線隊員的身體,如果是』d』,表示是準備擒殺的防守球員的身體,如果是』q』,表示是四分衛的身體。

輸入保證符合上面的條件。防守球員的身體總共不超過20格。

output

對每組資料,輸出包含擒殺所需最少步數的一行。如果不能擒殺,輸出帶』impossible』的一行。

sample input

6 6.q….

qq..oo

.oo..o

…o.o

oo.o..

….dd

7 7.q…..

qq.ooo.

…o…o……

oo..oo.

.o…..

…..dd

0 0sample output

impossible

92:大致題意

移動d去找q,求最短步數。

3:思路

因為d,q都不止乙個,所以移動的時候d要同時移動,而且只要有乙個d碰到q就行,不可以轉身,只能平移。

一開始要將d的位置存在乙個陣列裡,移動的時候讓他們同時移動。

最後碰到q的時候結束就行啦啦啦~

4:感想

也是bfs,比上一道題簡單一點,思路很簡單,一步一步的平移,將4個方向遍歷,並且不能碰到o,不能越界。符合要求的話就放入佇列中。

5:ac**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 99999999

using

namespace

std;

const

int max=100+10;

char map[max][max];

int mark[max][max];

int dir[4][2]=;

int n,m,size;

struct node

node(int x,int y,int i)

}start;

int bfs(int &flag)

if(j != size)continue;

if(mark[next.x[0]][next.y[0]] == flag)continue;

next.time=now.time+1;

mark[next.x[0]][next.y[0]]=flag;

for(j=0;jif(map[next.x[j]][next.y[j]] == 'q')return next.time;

q.push(next);}}

return -1;

}int main()}}

start.time=0;

int temp=bfs(++num);

if(temp == -1)cout

<

cout

0;}

SDAU 搜尋專題 總結

這個專題主要有4個內容。1 二分法。找到最大值和最小值,取他們的中點mid。判斷mid這個點的值,從而改變左端點或者右端點。一直重複此過程。2 3分法。和二分法類似,找到左端點和右端點,取中點mid,然後再根據題意,取mid與右端點或者左端點的中點midmid。判斷mid這個點的值,從而改變左端點或...

SDAU 搜尋專題 08 猜數字

1 問題描述 problem description a有1數m,b來猜.b每猜一次,a就說 太大 太小 或 對了 問b猜n次可以猜到的最大數。input 第1行是整數t,表示有t組資料,下面有t行 每行乙個整數n 1 n 30 output 猜n次可以猜到的最大數 sample input 21 ...

SDAU 搜尋專題 17 非常可樂

1 問題描述 problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n ...