0/1bfs

#include<bits/stdc++.h>
using namespace std;
int n,m,r,c,x,y;
const int maxn=2000+10;
int g[maxn][maxn];
bool vis[maxn][maxn];
int ans;
int idx[6]={0,-1,1,0,0};
int idy[6]={0,0,0,-1,1};
struct node
{
	int x,y,l,r;
};
void bfs()
{
	int u,v;
	deque<node> q;
	q.push_front({r,c,0,0});
	vis[r][c]=true;
	while (q.size())
	{
		node nd=q.front();
		q.pop_front();
		ans++;
		for (int i=1;i<=4;i++)
		{
			u = nd.x+idx[i];
			v = nd.y+idy[i];
			if (u<1 || u>n || v<1 || v>m || vis[u][v] || g[u][v]) continue;
			if (i == 1 || i == 2) q.push_front({u,v,nd.l,nd.r});
			if (i == 3 && nd.l<x) q.push_back({u,v,nd.l+1,nd.r});
			if (i == 4 && nd.r<y) q.push_back({u,v,nd.l,nd.r+1});
			vis[u][v]=true;
		}
	}
}
int main()
{
	cin >> n >> m;
	cin >> r >> c;
	cin >> x >> y;
	char c;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			cin >> c;
			if (c == '*') g[i][j]=1;
		}
	}
	bfs();
	cout << ans << endl;
	return 0;
}
posted @ 2026-03-24 11:48  msjing  阅读(0)  评论(0)    收藏  举报