题目:1009: 细胞
Description
一矩形阵列由数字0到9组成,数字1到9表明细胞。
细胞的定义为沿细胞数字上下左右仍是细胞数字则为同一细胞。
求给定矩形阵列的细胞个数。
如阵列
4 10
0234500067
1034560500
2045600671
0000000089
有4个细胞。
Input
第一行包含2个整数n和m,分别表示矩形阵列的行数和列数。
接下来的n行,每行m个数字,表明细胞的矩形阵列。
Output
输出细胞的个数。
Sample Input
4 10
0234500067
1034560500
2045600671
0000000089
Sample Output
4函数
思路:这个题目的大致意思是输入的细胞矩阵,只要是数字相邻而且相连(且不能是0!),即为一个细胞;
因此这个用dfs的方法,即每次排查的时候,找到若是不是0,则进入函数,先将这个位置给变成0,而后再排查其相邻的全部范围是否有非0项,有则将其变为0(由于相邻的话就算做一个细胞了);就这样依次排查进行便可;code
代码:ip
#include<stdio.h> void dfs(int ,int ); int t_x[]={0,-1,0,1}; int t_y[]={-1,0,1,0}; int n,m; char a[1000][1000]; int main() { int i,j,sum; while(scanf("%d%d",&n,&m)!=EOF){ sum=0; for(i=0;i<n;++i){ scanf("%s",a[i]); } for(i=0;i<n;++i){ for(j=0;j<m;++j) if(a[i][j]!='0'){ sum++; //printf("%d %d",i,j); dfs(i,j); //printf("%d %d",i,j); } } printf("%d\n",sum); } return 0; } void dfs(int x,int y) { int xx,yy; a[x][y]='0'; for(int i=0;i<4;++i){ xx=t_x[i]+x;yy=t_y[i]+y; if(xx<n&&xx>=0&&yy<m&&yy>=0) { if(a[xx][yy]!='0') dfs(xx,yy); } } }