题目描述
题目来自www.luogu.com.cn
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)?
输入格式
输入:整数m,n(m行,n列)
矩阵
输出格式
输出:细胞的个数
输入输出样例
输入 #1 复制
4 10
0234500067
1034560500
2045600671
0000000089
输出 #1 复制
4
思路
bfs
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int m,n;
int ans = 0;
char mp[150][150];
int vis[150][150] = {0};
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
struct point{
int x,y;
point(int a,int b){
x = a;
y = b;
}
};
void dfs(int xx, int yy){
queue<point>q;
point p(xx,yy);
q.push(p);
vis[xx][yy] = 1;
while(!q.empty()){
point t = q.front();
q.pop();
for(int i = 0; i < 4; i++){
int dx = t.x + dir[i][0];
int dy = t.y + dir[i][1];
if(dx >= 0 && dx < n && dy >= 0 && dy < m && mp[dx][dy] != '0' && !vis[dx][dy]){
point tt(dx,dy);
q.push(tt);
vis[dx][dy] = 1;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0; i<n; i++)
for(int j = 0; j < m; j++)
cin >> mp[i][j];
for(int i = 0; i < n ;i++){
for(int j = 0; j < m; j++){
if(!vis[i][j] && mp[i][j] != '0')
{
dfs(i,j);
ans++;
}
}
}
cout << ans << endl;
return 0;
}