题目: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
这道题可以用DFS和BFS来解决,这里先用DFS
DFS代码:
//
// main.cpp
// DFS——细胞问题
//
// Created by showlo on 2018/4/16.
// Copyright © 2018年 showlo. All rights reserved.
//
#include <stdio.h>
#include <algorithm>
using namespace std;
#define max 1000
char map[max][max];
int vis[max][max];
int m,n;
void dfs(int x,int y){
int i,nx,ny;
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
for (i=0; i<4; i++) {
nx=x+dx[i];
ny=y+dy[i];
//printf("%d %d\n",nx,ny);
if (nx>=0&&nx<m&&ny>=0&&ny<n&&map[nx][ny]!='0'&&vis[nx][ny]==0) { //如果添加条件:&map[nx][ny]==map[x][y],可以计算数字相同条件下的细胞个数
// printf("%d %d\n",nx,ny);
vis[nx][ny]=1;
dfs(nx,ny);
}
else
continue;
}
return;
}
int main() {
int i,j,num;
while (scanf("%d %d",&m,&n)!=EOF) {
num=0;
memset(vis, 0, sizeof(vis));
for (i=0; i<m; i++) {
scanf("%s",map[i]);
}
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
if (vis[i][j]==0&&map[i][j]!='0') {
printf("%d %d\n\n",i,j);
num++;
vis[i][j]=1;
dfs(i,j);
}
else
continue;
}
}
printf("%d\n",num);
}
return 0;
}
BFS代码: