#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 条评论

  • 1