P1596Lake Countings

一.题目描述:

 

 

 

 二.解题思路:

枚举每一个W点,把八个方向的W全部着色为'.'就行了,每次着色一次就是一个水坑。我被dfsT过很多次,所以直接用bfs实现的。

三.代码实现:

复制代码
 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 char farmland[110][110];
 4 bool bk[110][110];
 5 int cnt;
 6 int n,m;
 7 int mv[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,0},{1,-1},{1,1}};
 8 struct node{int x;int y;};
 9 void bfs(int sx,int sy)
10 {
11     queue <node> ans;
12     node u;
13     u.x = sx;
14     u.y = sy;
15     ans.push(u);
16     int head = 1;
17     int tail = 2;
18     while(head < tail){
19     node v = ans.front();
20     ans.pop();
21     farmland[v.x][v.y] = '.';
22     for(int i = 0;i < 8;i++){
23         int dx = v.x + mv[i][0];
24         int dy = v.y + mv[i][1];
25         if(dx < 0 || dx >=n || dy < 0 || dy >= m) continue;
26         if(farmland[dx][dy] == '.' || bk[dx][dy]) continue;
27             node w;
28             w.x = dx;
29             w.y = dy;
30             ans.push(w);
31             bk[dx][dy] = 1;
32             tail++;
33         }
34         head++;
35     }
36 }
37 int main()
38 {
39     cin >> n >> m;
40     getchar();
41     for(int i = 0;i < n;i++){
42         for(int j = 0;j < m;j++)
43             cin >> farmland[i][j];
44         getchar();
45     }
46 
47     for(int i = 0;i < n;i++)
48         for(int j = 0;j < m;j++)
49             if(farmland[i][j] == 'W'){
50                 bk[i][j] = 1;
51                 bfs(i,j);
52                 cnt++;
53             }
54     cout << cnt << endl;
55     return 0;
56 }
复制代码

 

posted @   scannerkk  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示