记录编号 261337 评测结果 AAAAAAAAAAAAA
题目名称 [USACO Feb07] 青铜莲花池 最终得分 100
用户昵称 Gravatarraywzy 是否通过 通过
代码语言 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;
}