蓝桥杯-红与黑
链接:https://www.acwing.com/problem/content/1115/
代码:
bfs:
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
char s[25][25];
int dx[]={0,-1,0,1};
int dy[]={-1,0,1,0};
int n,m;
void bfs(int x,int y){
int ans=1;
queue<pair<int,int>>q;
q.push({x,y});
s[x][y]='#';
while(q.size()){
x=q.front().first;
y=q.front().second;
q.pop();
for(int i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if(a<1||b<1||a>n||b>m||s[a][b]=='#')continue;
ans++;
q.push({a,b});
s[a][b]='#';
}
}
cout<<ans<<endl;
}
int main (){
while(cin>>m>>n&&(n+m)){
for(int i=1;i<=n;i++)
cin>>(s[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s[i][j]=='@')bfs(i,j);
}
return 0;
}
dfs:
#include<bits/stdc++.h>
using namespace std;
char s[25][25];
int b[25][25];
int dx[]={0,-1,1,0};
int dy[]={-1,0,0,1};
int n,m;
void dfs(int x,int y){
// cout<<x<<" "<<y<<endl;
if(x<1||y<1||x>n||y>m||s[x][y]=='#')return ;
b[x][y]=1;
for(int i=0;i<4;i++){
int l=x+dx[i];
int r=y+dy[i];
if(!b[l][r])dfs(l,r);
}
}
int main (){
cin>>m>>n;
while(n!=0&&m!=0){
for(int i=1;i<=n;i++)
cin>>(s[i]+1);
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s[i][j]=='@'){
dfs(i,j);
}
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans+=b[i][j];
cout<<ans<<endl;
cin>>m>>n;
}
return 0;
}

浙公网安备 33010602011771号