T170352.冰面 题解
2026-10-18 15:33:49
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
#define inf 1e9+10
#define ll long long
const ll N=401;
struct node{
ll x,y;
};
char a[N][N];
ll n,m,sx,sy,cnt;
queue<node> q;
bool v[N][N],s[N][N];
bool good(ll x,ll y)
{
return x>=1 && x<=n && y>=1 && y<=m && !v[x][y] && a[x][y]=='.';
}
ll left(ll x,ll y)
{
if(s[x][y]!=1) cnt++;
s[x][y]=1;
if(a[x][y-1]!='#') return left(x,y-1);
else return y;
}
ll right(ll x,ll y)
{
if(s[x][y]!=1) cnt++;
s[x][y]=1;
if(a[x][y+1]!='#') return right(x,y+1);
else return y;
}
ll up(ll x,ll y)
{
if(s[x][y]!=1) cnt++;
s[x][y]=1;
if(a[x-1][y]!='#') return up(x-1,y);
else return x;
}
ll down(ll x,ll y)
{
if(s[x][y]!=1) cnt++;
s[x][y]=1;
if(a[x+1][y]!='#') return down(x+1,y);
else return x;
}
void bfs()
{
q.push({sx,sy});
v[sx][sy]=1;cnt++;s[sx][sy]=1;
while(!q.empty())
{
ll nx=q.front().x;
ll ny=q.front().y;
ll ly=left(nx,ny),ry=right(nx,ny),ux=up(nx,ny),dx=down(nx,ny);
q.pop();
if(good(nx,ly))
{
v[nx][ly]=1;
q.push({nx,ly});
}
if(good(nx,ry))
{
v[nx][ry]=1;
q.push({nx,ry});
}
if(good(ux,ny))
{
v[ux][ny]=1;
q.push({ux,ny});
}
if(good(dx,ny))
{
v[dx][ny]=1;
q.push({dx,ny});
}
}
}
int main()
{
cin>>n>>m;sx=2;sy=2;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) cin>>a[i][j];
}
bfs();
cout<<cnt;
return 0;
}
这里空空如也

















有帮助,赞一个