1 条题解
-
0
本题唯一注意输入的接受
#include<bits/stdc++.h> using namespace std; #define int long long /* 1-9为细胞 上下左右在一堆就是同组 问有几组 //这个题没意思就是上一个题的小改(可以在改一下让同数字才一组 但是也没意思) 染色法 这次来dfs */ const int N=120; int s[N][N]; int ans; int n,m; int dx[]={1,-1,0,0}; int dy[]={0,0,-1,1}; void dfs(int x,int y) { s[x][y]=0; //终点咋写 答:不用写因为dfs会自动退出 dfs死循环只是因为 A-b b-A重复 for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(s[nx][ny]!=0) { dfs(nx,ny); } } } signed main() { std::ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++)//注意读入 { string str; cin >> str; for(int j=1;j<=m;j++) { s[i][j] = str[j-1]-'0'; // 字符串下标从0开始,数组从1开始 } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(s[i][j]!=0) { ans++; dfs(i,j); } } } cout<<ans<<"\n"; return 0; }
- 1
信息
- ID
- 163
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 116
- 已通过
- 54
- 上传者