挑战程序设计竞赛 # POJ 2386 Lake Counting

版权声明:转载请注明原文地址即可,要是本文对您有些许帮助的话,请您在下方点个赞,谢谢啦ヾ(o◕∀◕)ノヾ https://blog.csdn.net/qq_33583069/article/details/86714016

没啥好说的。。
主要是坐标更新的时候写法可以参照一下。

另一种写法是手动写一个
const dx[]={-1,1,0,0};
const dy[]={0,0,-1,1};
然后你懂的。。

这个题呢由于已经预先覆盖了a[i][j]所以不可能再枚举到自身。

#include <iostream>
using namespace std;
int n,m,cnt;
#define N 100
char a[N][N];
bool inside(int x,int y){
 return x>=0&&x<n&&y>=0&&y<m;
}
void dfs(int x,int y){
 a[x][y]='.';
 for(int i=-1;i<=1;i++)
  for(int j=-1;j<=1;j++){
  int tx=x+i,ty=y+j;
  if(inside(tx,ty)&&a[tx][ty]=='W')dfs(tx,ty);  
 }
}
int main(){
 cin>>n>>m;
 for(int i=0;i<n;i++)cin>>a[i];
 for(int i=0;i<n;i++)
  for(int j=0;j<m;j++)
   if(a[i][j]=='W'){
    ++cnt;dfs(i,j);
 }
 cout<<cnt;
 return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_33583069/article/details/86714016