Bronze Lilypad Pond, 2007 Feb usaco

標準寬搜

#include<stdio.h>
#include<queue>
using namespace std;
int m,n,m1,n1;
int dir[8][2];
int map[50][50];
int sx,sy;
int ans[50][50];
int vis[50][50];
bool fun(int x,int y)
{
	if(x>=1&&x<=m&&y>=1&&y<=n)return true;
	return false;
}
void bfs()
{
	queue<int>X;
	queue<int>Y;
	X.push(sx);
	Y.push(sy);
	vis[sx][sy]=1;
	ans[sx][sy]=0;
	while(!X.empty())
	{
		int ux=X.front();
		int uy=Y.front();
		X.pop();
		Y.pop();
		if(map[ux][uy]==4)
		{
			printf("%d",ans[ux][uy]);
			return ;
		}
		for(int i=0;i<8;i++)
		{
			int vx=ux+dir[i][0];
			int vy=uy+dir[i][1];
			if(!vis[vx][vy]&&(map[vx][vy]==1||map[vx][vy]==4)&&fun(vx,vy))
			{
				vis[vx][vy]=1;
				ans[vx][vy]=ans[ux][uy]+1;
				X.push(vx);
				Y.push(vy);
			}
		}
	}
}
int main()
{
//	freopen("bronlily.in","r",stdin);
//	freopen("bronlily.out","w",stdout);
	scanf("%d %d %d %d",&m,&n,&m1,&n1);
	dir[0][0]=m1,dir[0][1]=n1;
	dir[1][0]=m1,dir[1][1]=-n1;
	dir[2][0]=-m1,dir[2][1]=n1;
	dir[3][0]=-m1,dir[3][1]=-n1;
	dir[4][0]=n1,dir[4][1]=m1;
	dir[5][0]=n1,dir[5][1]=-m1;
	dir[6][0]=-n1,dir[6][1]=m1;
	dir[7][0]=-n1,dir[7][1]=-m1;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			scanf("%d",&map[i][j]);
			if(map[i][j]==3)
			{
				sx=i,sy=j;
			}
		}
	}
	bfs();
}


發佈了59 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章