①细胞 题目描述
题目描述
一个矩形阵列由数字0~9组成,数字1 ~9代表细胞,如果一个数的上下左右有相同的数,则它们属于同一个细胞,求给定的矩形阵列的细胞个数 如:
138332
125322
235312
一共有10个细胞。
输入格式
•第一行两个整数n,m。(n<=1000,m<=1000)表示矩阵有n行m列。接下来是这个矩阵。
输出格式
有多少细胞
样例
##样例输入
3 5
32372
25275
19145
##样例输出
13
算法分析
这一道题算是一个搜索的板题
思路非常的简单,就是在遍历每个数时,都进行一次搜索。
而搜索思路呢,就是用DFS.
void dfs(int x,int y,int from){
if(flag[x][y]==true||a[x][y]!=from||x<=0||x>m||y<=0||y>n){
return ;
}
flag[x][y]=true;
dfs(x+1,y,a[x][y]);
dfs(x-1,y,a[x][y]);
dfs(x,y+1,a[x][y]);
dfs(x,y-1,a[x][y]);
}
用 flag 布尔数组来记录走过的路。
代码
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int M=10005;
int a[M][M];
bool flag[M][M];
int n,m,ans;
void