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 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~