AcWing 1113. 红与黑
原题链接
简单
作者:
wjslyk
,
2024-09-11 23:20:22
,
所有人可见
,
阅读 1
#include <bits/stdc++.h>
using namespace std;
const int N=30,M=N*N;
int s[N][N];
int n,m;
typedef struct node{
int a,b;
} PII;
void bfs(int x,int y)
{
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
PII q[M];
int flag[N][N];
memset(flag,0,sizeof flag);
int head=-1,tail=0;
q[++head]={x,y}; flag[x][y]=1;
while(head>=tail){
auto e=q[tail++];
int i=e.a;
int j=e.b;
// cout<<i<<" "<<j<<endl;
for(int k=0;k<4;k++){
int i1=i+dx[k];
int j1=j+dy[k];
if(i1<0 || j1<0 || i1>=m || j1>=n) continue ;
if(!s[i1][j1] && !flag[i1][j1]){
q[++head]={i1,j1};
flag[i1][j1]=1;
}
}
}
cout<<tail<<endl;
return ;
}
int main()
{
int x,y; //记录位置
char e;
cin>>n>>m;
while(n || m){
//开始输入矩阵
memset(s,0,sizeof s);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>e;
if(e=='#') s[i][j]=1;
if(e=='@'){
x=i; y=j;
}
}
}
//bfs处理
bfs(x,y);
//循环
cin>>n>>m;
}
return 0;
}