7 条题解
-
0
一,分析: 一张n*m的地图,有山(不一定联通)和水,求山数量。 二,思路: 1.常规: 访问地图,打上标记。 2,不常规: 进入'#'处('-'处不访问),寻找与它相邻的'#'。所以只要找到没打过标记的'#'答案+1。 如下:
for(int i=0;i<n;i++){ for(int j=0;j<k;j++){ if(map[i][j]=='#'&&vis[i][j]==0){ ans++; dfs(i,j); } } }
按上述微微润色一下dfs函数就好了~~
void dfs(int x,int y){ if(x<0||x>=n||y<0||y>=k||vis[x] [y]1||map[x][y]'-') return; vis[x][y]=1; dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1); }
故代码如下:
#include<iostream> using namespace std; int n,k; char map[110][110]; int vis[110][110]; int ans=0; void dfs(int x,int y){ if(x<0||x>=n||y<0||y>=k||vis[x][y]==1||map[x][y]=='-') return; vis[x][y]=1; dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1); } int main(){ cin>>n>>k; for(int i=0;i<n;i++){ for(int j=0;j<k;j++){ cin>>map[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<k;j++){ if(map[i][j]=='#'&&vis[i][j]==0){ ans++; dfs(i,j); } } } cout<<ans; return 0; }
信息
- ID
- 2744
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 57
- 已通过
- 23
- 上传者