1329细胞

题目

原题链接http://ybt.ssoier.cn:8088/problem_show.php?pid=1329

【题目描述】 

一矩形阵列由数字00到99组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:

阵列

4 10
0234500067
1034560500
2045600671
0000000089

有44个细胞。

【输入】

第一行为矩阵的行n和列m;

下面为一个n×m的矩阵。

【输出】

细胞个数。

【输入样例】

4 10
0234500067
1034560500
2045600671
0000000089

 【输出样例】

4

 分析

注意到这道题数据为一整行,没有空格,所以用int类型输入显然是不行的,我们可以用char类型的二维数组来输入。整体思路为广度优先搜索,这道题就是一个模板。

思路

首先创建全局变量、数组、以及结构体。代码如下:

int n,m;
int s[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//偏移量数组
char a[1000][1000];
int mk[1000][1000];//标记数组
int res=0;//记个数
struct node{
    int x;//x坐标
    int y;//y坐标
};

然后写bfs广搜函数。详解见如下代码注释:

void bfs(int x,int y){
    queueq;//结构体队列
    q.push((node){x,y}); //入队
    while(q.size()){
        node t=q.front();//出队
        q.pop();//删除
        for(int i=0;i<4;i++){
            int xx=t.x+s[i][0];
            int yy=t.y+s[i][1];
            if(xx>=0&&xx=0&&yy

接着写主函数里的输入。代码如下:

cin>>n>>m;
for(int i=0;i>a[i][j];
    }
}

输入完之后循环调用bfs函数。

for(int i=0;i

最后输出res。

cout<

完整代码

#include
#include
using namespace std;
int n,m;
int s[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
char a[1000][1000];
int mk[1000][1000];
int res=0;
struct node{
    int x;
    int y;
};
void bfs(int x,int y){
    queueq;
    q.push((node){x,y}); 
    while(q.size()){
        node t=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            int xx=t.x+s[i][0];
            int yy=t.y+s[i][1];
            if(xx>=0&&xx=0&&yy>n>>m;
    for(int i=0;i>a[i][j];
        }
    }
    for(int i=0;i

新手上路,请多多指教。

你可能感兴趣的:(蓝桥杯,职场和发展)