记录编号 342593 评测结果 AAAAAAAAAAAAA
题目名称 [USACO Feb07] 青铜莲花池 最终得分 100
用户昵称 Gravatar残星誓言 是否通过 通过
代码语言 C++ 运行时间 0.040 s
提交时间 2016-11-08 17:29:44 内存使用 0.28 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=50;
struct zb
{
	int x;int y; int ci;
} s,t;
queue<zb> q;
int tool[10];
int tool2[10];
int m,n,m1,m2;
int ans=2147483647;
int mp[maxn][maxn];
bool vis[maxn][maxn];
int  bfs()
{
	s.ci=0;
	q.push(s); 
	memset(vis,0,sizeof(vis));
	while(!q.empty())
	{
		zb x=q.front(); q.pop(); 	//printf("%d %d\n",x.x,x.y);
									 if(x.x==t.x&&x.y==t.y) 
									{
										return x.ci;
									}
	
		for(int i=0;i<=3;i++)
		{
			zb nx;
			nx.x=x.x+tool[i];
			nx.y=x.y+tool2[i]; nx.ci=x.ci+1;//printf("  %d %d\n",nx.x,nx.y);
			if(nx.x>0&&nx.y>0&&nx.x<=m&&nx.y<=n&&mp[nx.x][nx.y]!=0&&mp[nx.x][nx.y]!=2&&!vis[nx.x][nx.y])
				{
					q.push(nx);
					vis[nx.x][nx.y]=1;
				}
			nx.x=x.x+tool[i];
			nx.y=x.y-tool2[i]; nx.ci=x.ci+1;//printf("  %d %d\n",nx.x,nx.y);
			if(nx.x>0&&nx.y>0&&nx.x<=m&&nx.y<=n&&mp[nx.x][nx.y]!=0&&mp[nx.x][nx.y]!=2&&!vis[nx.x][nx.y])
				{
					q.push(nx);
					vis[nx.x][nx.y]=1;
				}
		}
		

	}
}
int main()
{
	freopen("bronlily.in","r",stdin);
	freopen("bronlily.out","w",stdout);
	scanf("%d%d%d%d",&m,&n,&m1,&m2);
	tool[0]=m1; tool[1]=0-m1; tool[2]=m2;tool[3]=0-m2;
	tool2[0]=m2;tool2[1]=m2;tool2[2]=m1; tool2[3]=m1;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
			{
				scanf("%d",&mp[i][j]);
				if(mp[i][j]==3)
					s.x=i,s.y=j; 
				else
				if(mp[i][j]==4)
					t.x=i,t.y=j;
			}
	ans=bfs();
	printf("%d",ans);
	return 0;
}