DFS——细胞问题

题目: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代码:


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页