【题目描述】
一矩形阵列由数字00到99组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:
阵列
4 10 0234500067 1034560500 2045600671 0000000089
有44个细胞。
【输入】
第一行为矩阵的行nn和列mm;
下面为一个n×mn×m的矩阵。
【输出】
细胞个数。
【输入样例】
4 10 0234500067 1034560500 2045600671 0000000089
【输出样例】
4
这个应该不卡时间的因为bfs和dfs都可以做
然后注意一下这题用int定义数组不行,要用字符串
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
};
int n,m;
int u[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
char s[300][300];
void BFS(int a,int b)
{
queue<node>Q;
s[a][b]='0';
node c;
c.x=a;
c.y=b;
Q.push(c);
while(!Q.empty()){
node d=Q.front();
for(int i=0;i<4;i++){
int xx=d.x+u[i][0];
int yy=d.y+u[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&(s[xx][yy]!='0')){
s[xx][yy]='0';
node e;
e.x=xx;
e.y=yy;
Q.push(e);
}
}
Q.pop();
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>s[i][j];
int sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(s[i][j]!='0'){
sum++;
BFS(i,j);
}
}
}
cout<<sum<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int u[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m;
char g[1000][1000];
void dfs(int x,int y)
{
for(int i=0;i<4;i++){
int xx=x+u[i][0];
int yy=y+u[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&(g[xx][yy]!='0')){
g[xx][yy]='0';
dfs(xx,yy);
}
}
}
int main()
{
int cnt=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",g[i]);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(g[i][j]!='0')
{
cnt++;
dfs(i,j);
}
printf("%d\n",cnt);
return 0;
}