P1451 求细胞数量
题目描述
一矩形阵列由数字 000 到 999 组成,数字 111 到 999 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 nnn 和 mmm。
接下来 nnn 行,每行一个长度为 mmm 的只含字符 0 到 9 的字符串,代表这个 n×mn \times mn×m 的矩阵。
输出格式
一行一个整数代表细胞个数。
输入输出样例 #1
输入 #1
4 10
0234500067
1034560500
2045600671
0000000089
输出 #1
4
说明/提示
数据规模与约定
对于 100%100\%100% 的数据,保证 1≤n,m≤1001 \le n,m \le 1001≤n,m≤100。
dfs
思路:创建一个数组,不为0的地方就是细胞,然后dfs搜连通块,把搜到的都归0,保证不重复。
然后就是循环找没被归0的,答案+1。
(这题是我自己写的,从上上篇帖子“海战”那道题得来的启发,思路一样的,首发ac!)
#include <bits/stdc++.h>
using namespace std;
int n,m;
int mmap[105][105];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int ans;
void dfs(int x,int y){
mmap[x][y]=0;
for(int i=0;i<4;i++){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&mmap[xx][yy]!=0){
dfs(xx,yy);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
char c;
cin>>c;
mmap[i][j]=c-'0';
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
if(mmap[i][j]!=0){
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
1183

被折叠的 条评论
为什么被折叠?



