7 条题解
-
0
这也是一个连通块基础题好吧!
1.首先,我们先来定义一下变量
int n,m,ans; char a[105][105]; bool vis[105][105]; int dx[4]={-1,1,0,0}; int dy[4]={0,0,-1,1};
2.接下来就是最最最简单的主函数部分了
int main(){ cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; } }
此处我想每个人都会吧(除!@#外)
for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]=='#'&&vis[i][j]==0){ vis[i][j]=1; dfs(i,j); ans++; } } }
最后的最后,被忘了输出
cout<<ans; return 0;
3.接下来,最难的函数部分到了(但还是无敌的简单)
void dfs(int x,int y){ for(int i=0;i<4;i++){ int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=0&&yy>=0&&xx<n&&yy<m&&vis[xx][yy]==0&&a[xx][yy]=='#'){ vis[xx][yy]=1; dfs(xx,yy); } } }
4.最后最后最后全部代码就在下方了(应该没人不会吧)
#include<bits/stdc++.h> using namespace std; int n,m,ans; char a[105][105]; bool vis[105][105]; int dx[4]={-1,1,0,0}; int dy[4]={0,0,-1,1}; void dfs(int x,int y){ for(int i=0;i<4;i++){ int xx=x+dx[i]; int yy=y+dy[i]; if(xx>=0&&yy>=0&&xx<n&&yy<m&&vis[xx][yy]==0&&a[xx][yy]=='#'){ vis[xx][yy]=1; dfs(xx,yy); } } } int main(){ cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]=='#'&&vis[i][j]==0){ vis[i][j]=1; dfs(i,j); ans++; } } } cout<<ans; return 0; }
第一次发题解请大家互相关照(点亿个赞哦)!!!!!!!
拜拜
信息
- ID
- 2744
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 57
- 已通过
- 23
- 上传者