洪水填充算法
2024-08-27 15:10:24
发布于:上海
5阅读
0回复
0点赞
#include<iostream>
using namespace std;
char map[505][505];
bool vis[505][505];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int n,m;
int res=0;
bool check(int x,int y){
return 0<=x&&x<n&&0<=y&&y<m;
}
void dfs(int x,int y,int f){
res+=f;
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(check(nx,ny)&&map[nx][ny]=='0'&&!vis[nx][ny]){
dfs(nx,ny,f);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<=n-1;i++){
for(int j=0;j<=m-1;j++){
cin>>map[i][j];
}
}
for(int i=0;i<=n-1;i++){
for(int j=0;j<=m-1;j++){
if(((i==0)||(i==n-1)||(j==0)||(j==m-1))&&(map[i][j]=='0')){
dfs(i,j,0);
}
}
}
for(int i=0;i<=n-1;i++){
for(int j=0;j<=m-1;j++){
if(map[i][j]=='0'&&!vis[i][j]){
dfs(i,j,1);
}
}
}
cout<<res;
}
这里空空如也
有帮助,赞一个