题解 | 数水坑

数水坑

https://www.nowcoder.com/practice/664ca4289fcf457ba3109fdf4a7a1a05

#include <iostream>
#include<string>
#include<vector>
#include<array>
using namespace std;

array<int,8> dx{-1,-1,0,1,1,1,0,-1};
array<int,8> dy{0,1,1,1,0,-1,-1,-1};
int main() {
   ios::sync_with_stdio(false);
   cin.tie(nullptr);
   int n,m;
   cin>>n>>m;
   vector<string> area;
   area.reserve(n);
   for(int i=0;i<n;i++){
      string line;
      cin>>line;
      area.emplace_back(line);
   }
   struct counter{
        vector<string>& area;
        int &row,&col;
        int count=0;
        counter(vector<string>& a,int& r,int& c):area(a),row(r),col(c){}
        void cover(int x,int y){
             area[x][y]='.';
             for(int i=0;i<8;i++){
                if(x+dx[i]>=0&&x+dx[i]<row&&y+dy[i]>=0&&y+dy[i]<col&&area[x+dx[i]][y+dy[i]]=='W'){
                    cover(x+dx[i],y+dy[i]);
                }
             }
        }
        void search(){
             for(int i=0;i<row;i++){
                for(int j=0;j<col;j++){
                    if(area[i][j]=='W'){
                         count++;
                         cover(i,j);
                    }
                }
             }
        }
   };
   counter c{area,n,m};
   c.search();
   cout<<c.count;
   return 0;
}

全部评论

相关推荐

01-19 15:14
已编辑
延安大学 C++
累死的一条狗:我说白了这种玩意你直接点举报就完事了在给他挂出来
找工作以来,你最看不惯_...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务