记录编号 384427 评测结果 AAAAAAAAAAAAA
题目名称 [USACO Feb07] 青铜莲花池 最终得分 100
用户昵称 Gravatar蒙牛盐酸乳 是否通过 通过
代码语言 C++ 运行时间 0.017 s
提交时间 2017-03-18 11:06:22 内存使用 11.76 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int m,n,head,tail,stx,sty,edx,edy,m1,m2;
int map[31][31];
int Qx[1000000],Qy[1000000],Qstep[1000000];
bool jilu[30][30];
int main()
{
	freopen("bronlily.in","r",stdin);
	freopen("bronlily.out","w",stdout);
	cin>>m>>n>>m1>>m2;
	int dx[8]={m1,m1,-m1,-m1,m2,m2,-m2,-m2},dy[8]={m2,-m2,m2,-m2,m1,-m1,m1,-m1};
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
			{
				cin>>map[i][j];
				if(map[i][j]==3)
				{
					stx=i;
					sty=j;
				}
				if(map[i][j]==4)
				{
					edx=i;
					edy=j;
				}
			}
	}
	Qx[0]=stx;
	Qy[0]=sty;
	jilu[stx][sty]=1;
	while(head<=tail)
	{
		if(Qx[head]==edx && Qy[head]==edy)
		{
			cout<<Qstep[head];
			break;
		}
		for(int i=0;i<=7;i++)
		{
			int nx=Qx[head]+dx[i];
			int ny=Qy[head]+dy[i];
			if(nx<0 || nx>=m || ny<0 || ny>=n) continue;
			if(map[nx][ny]==0 || map[nx][ny]==2) continue;
			if(jilu[nx][ny]==1) continue;
			jilu[nx][ny]=1; 
			tail++;
			Qx[tail]=nx;
			Qy[tail]=ny;
			Qstep[tail]=Qstep[head]+1;
		}
		head++;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}