- 题解
2744题解
- 2025-3-10 20:29:51 @
#include using namespace std; int n,m,ans; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; char mp[101][101]; bool vis[101][101]; void dfs(int x,int y){ for(int i=0;i<4;i++){ int xx=x+dx[i],yy=y+dy[i]; if(xx>0&&xx<=n&&yy>0&&yy<=m&&!vis[xx][yy]&&mp[xx][yy]'#'){ vis[xx][yy]=true; dfs(xx,yy); } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mp[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(mp[i][j]'#'&&vis[i][j]==false){ ans++; dfs(i,j); } } } cout<<ans; return 0; }
题目思路: 只要找到未标记的山或山的一部分,先让计数+1,再把整座山都标记一边,这样可以避免重复。
1 条评论
-
刘李瑾瑜 LV 7 @ 2025-3-11 17:57:26
sweeter
- 1