DFS 1033 Lake Counting
DFS 1033 Lake Counting
思路
DFS求连通块
在剪枝的时候忘了加 mp[a][b] == '.'
,只能搜第一个连通块,艹
剪枝还是老一套:边界、记忆化搜索、判断对象
遇到水坑W,直接DFS,把连通块全标记,剪枝完成
板子题,不说看代码。
代码
#include <bits/stdc++.h> using namespace std; int n, m; const int N = 105; char mp[N][N]; int vis[N][N]; int dx[] = {-1, -1, -1, 1, 1, 1, 0, 0}; int dy[] = {0, 1, -1, 0, 1, -1, 1, -1}; void dfs(int x, int y) { vis[x][y] = 1; for (int i = 0; i < 8; i++) { int a = x + dx[i], b = y + dy[i]; if (a < 1 || b < 1 || a > n || b > m || vis[a][b] || mp[a][b] == '.') continue; dfs(a, b); } } int main() { cin >> n >> m; int ans = 0; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> mp[i][j], vis[i][j] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (vis[i][j] == 0 && mp[i][j] == 'W') { ans ++; dfs(i, j); } } } cout << ans; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~