青銅蓮花池
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 21 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} }
}