记录编号 |
261337 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[USACO Feb07] 青铜莲花池 |
最终得分 |
100 |
用户昵称 |
raywzy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2016-05-16 21:56:18 |
内存使用 |
0.30 MiB |
显示代码纯文本
#include <stdio.h>
#include <string.h>
#define MAX 99999999
int a[31][31];
int s[31][31];
int M,N,M1,M2;
int Bx,By,Ex,Ey;
int min = MAX;
void dfs(int x,int y,int step){
if(x<0||x>=N||y<0||y>=M)
return;
if(step>=s[y][x])
return;
s[y][x] = step;
if(a[y][x]==0||a[y][x]==2)
return;
if(a[y][x]==4)
return;
dfs(x+M1,y+M2,step+1);
dfs(x+M1,y-M2,step+1);
dfs(x-M1,y-M2,step+1);
dfs(x-M1,y+M2,step+1);
dfs(x+M2,y+M1,step+1);
dfs(x-M2,y+M1,step+1);
dfs(x+M2,y-M1,step+1);
dfs(x-M2,y-M1,step+1);
}
int main(){
freopen("bronlily.in","r",stdin);
freopen("bronlily.out","w",stdout);
scanf("%d%d%d%d",&M,&N,&M1,&M2);
memset(s,63,sizeof(s));
int i,j,k;
for(i=0;i<M;i++){
for(j=0;j<N;j++){
scanf("%d",&a[i][j]);
if(a[i][j]==3){
Bx = j;
By = i;
}
if(a[i][j]==4){
Ex = j;
Ey = i;
}
}
}
int step = 0;
//printf("%d %d",Bx,By);
dfs(Bx,By,step);
printf("%d\n",s[Ey][Ex]);
return 0;
}