AOJ 865 青銅蓮花池(BFS)

2021-07-31 06:25:37 字數 1343 閱讀 5297

青銅蓮花池

time limit: 1000 ms   memory limit: 256 mb

total submission: 63   submission accepted: 26

judge by case

description

為了讓奶牛們娛樂和鍛鍊,農夫約翰建造了乙個美麗的池塘。這個長方形的池子被分成了m行n列個方格(1 ≤ m, n ≤ 30)。一些格仔是堅固得令人驚訝的蓮花,還有一些格仔是岩石,其餘的只是美麗、純淨、湛藍的水。

貝西正在練習芭蕾舞,她站在一朵蓮花上,想跳到另一朵蓮花上去,她只能從一朵蓮花跳到另一朵蓮花上,既不能跳到水裡,也不能跳到岩石上。

貝西的舞步很像象棋中的馬步:每次總是先橫向移動m1 (1 ≤ m1 ≤ 30)格,再縱向移動m2 (1 ≤ m2 ≤ 30, m1 m2)格,或先縱向移動m1格,再橫向移動m2格。最多時,貝西會有八個移動方向可供選擇。

給定池塘的布局和貝西的跳躍長度,請計算貝西從起點出發,到達目的地的最小步數,我們保證輸入資料中的目的地一定是可達的。

input

第一行:四個用空格分開的整數:m,n,m1和m2

第二行到m + 1行:第i + 1行有n個用空格分開的整數,描述了池塘第i行的狀態:0 為水,1 為蓮花,2 為岩石,3 為貝西所在的起點,4 為貝西想去的終點。

output

第一行:從起點到終點的最少步數

sample input

original

transformed

4 5 1 2 

1 0 1 0 1

3 0 2 0 4

0 1 2 0 0

0 0 0 1 0

sample output

original

transformed

2

思路:輸出「最少步數」,可用bfs解,套用bfs模板即可。

**:

#include#define max 35

using namespace std;

struct point

}; int val;

int dir[8][2];//八個方向(日字)

int vis[max][max];//訪問陣列,走過標記為1

int map1[max][max];

int m,n,m1,m2;

queueq; //c++ stl

void bfs(int sx,int sy);

int main()

} }bfs(s1,s2);

cout<=0&&b>=0&&a} }

}