[USACO09OCT]Invasion of the Milkweed G

原题链接

题解

本题一看就是一道裸的BFS,但是有一个大坑点

所有的x,y,n,m坐标都是反的!!!

所以把 \(x\) 改成 \(y\),把 \(n\) 改成 \(m\) 即可

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=150;
int n,m,mx,my,f[N][N],ans;
char a[N][N];
struct kkk
{
	int y,x,t;
};
queue<kkk>q;
int dx[]={0,1,0,-1,1,1,-1,-1};
int dy[]={1,0,-1,0,1,-1,1,-1};
void bfs(int y,int x)
{
	f[y][x]=1;
	q.push(kkk{y,x,0});
	while(!q.empty())
	{
		kkk k=q.front();q.pop();
		ans=k.t;
		for(int i=0;i<=7;i++)
		{
			int tx=k.x+dx[i],ty=k.y+dy[i];
			if(a[ty][tx]=='.'&&!f[ty][tx])
				f[ty][tx]=1,q.push(kkk{ty,tx,k.t+1});
		}
	}
	cout<<ans;
}
int main()
{
	scanf("%d%d%d%d",&n,&m,&mx,&my);
	for(int i=m;i>=1;i--)
	for(int j=1;j<=n;j++)
		cin>>a[i][j];
	bfs(my,mx);
	return 0;
}
posted @ 2022-07-06 11:38  Epoch_L  阅读(14)  评论(0编辑  收藏  举报