46分求调
查看原帖
46分求调
644362
rememberit楼主2024/7/24 16:36

BFS代码,46分

代码如下

#include<bits/stdc++.h>
using namespace std;
struct T{
	int x,y;
};
int n,m,ans;
char a[110][110];
int dis[110][110];
const int dx[]={-1,-1,-1,0,0,1,1,1};
const int dy[]={-1,0,1,-1,1,-1,0,1};
void bfs(int sx,int sy)
{
	memset(dis,-1,sizeof(dis));
	queue<T>q;
	q.push((T){sx,sy});
	dis[sx][sy]=0,a[sx][sy]='M';
	while(!q.empty())
	{
		T now=q.front();
		q.pop();
		for(int i=0;i<8;i++)
		{
			int nx=now.x+dx[i];
			int ny=now.y+dy[i];
			if(nx<1||nx>n||ny<1||ny>m||a[nx][ny]!='.')continue;
			q.push((T){nx,ny});
			dis[nx][ny]=dis[now.x][now.y]+1;
			a[nx][ny]='M';
		}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			ans=max(ans,dis[i][j]);
}
int main()
{
	int mx,my;
	cin>>m>>n>>mx>>my;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	bfs(mx,my);
	cout<<ans<<'\n';
	return 0;
}
2024/7/24 16:36
加载中...