1329:【例8.2】细胞

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 13978     通过数: 7845

【题目描述】

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

阵列

4 10
0234500067
1034560500
2045600671
0000000089

有4个细胞。

【输入】

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

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

【输出】

细胞个数。

【输入样例】

4 10
0234500067
1034560500
2045600671
0000000089

【输出样例】

4

【分析】

这道题数据量不大,可以用广搜或深搜实现,使用广搜,尽量使用C++的队列实现,C语言代码模拟队列要复杂得多。就这道题来讲,题目要找细胞的个数,实际上就是典型的图连通性问题。

【参考代码1】

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>using namespace std;struct pp      // 坐标
{int x;int y;
};queue <pp> q;         // 队列
int n,m;              // n行m列
int ans=0;            // ans为答案
int a[105][105];      // 存矩阵
bool vis[105][105];   // 访问数组 int dx[4]={-1,1,0,0}; // 方向数组
int dy[4]={0,0,-1,1};void bfs(int sx,int sy)
{pp st;// 标记起点 st.x=sx;st.y=sy;vis[sx][sy]=1;q.push(st);while(!q.empty())         // 队列不为空 {pp nw=q.front();      // 返回队首 for(int i=0;i<4;i++)  // 沿四个方向拓展 {pp nxt=nw;// 记录这一方向 nxt.x+=dx[i];nxt.y+=dy[i];if(a[nxt.x][nxt.y]==0 || vis[nxt.x][nxt.y]==1) // 不是细胞或访问过 continue;vis[nxt.x][nxt.y]=1;  // 把这一连通块的点染色 q.push(nxt);          // 状态入队 }q.pop();    // 弹出队首 }
}
int main()
{cin>>n>>m;memset(a,0,sizeof(a));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%1d",&a[i][j]);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(vis[i][j]==0 && a[i][j]!=0)  // 未访问过,且是细胞 {bfs(i,j);ans++;        // 若这一连通块没搜过ans++ }}}cout<<ans;return 0;
}

【参考代码2】

由于数据量不大,这道题也可以用深搜完成。

#include <stdio.h>
#define N 1000
#define M 1000int n,m;
int num;
char a[N][M];
int dx[4]={-1,1,0,0};  //上、下、左、右
int dy[4]={0,0,-1,1};void dfs(int x,int y)
{int i,j,newx,newy;a[x][y]='0';for(i=0;i<4;i++){newx=x+dx[i];newy=y+dy[i];if(newx<n && newx>=0 && newy<m && newy>=0){if(a[newx][newy]!='0')dfs(newx,newy);}}
}
int main()
{int i,j;scanf("%d%d",&n,&m);getchar();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'){num++;    //遇见一个细胞就加加dfs(i,j); //去搜索这一点的四个方向}}}printf("%d\n",num);return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1329

信息学奥赛一本通(1329:【例8.2】细胞)相关推荐

  1. 信息学奥赛一本通1329:细胞

    题目 信息学奥赛一本通(C++版)在线评测系统 思路 这是一道典型的bfs染色问题,先遍历数组,只要没有标记为1,就开始bfs染色,最后输出color数量 接下来,咱就来把代码拆开来看看: 1. 准备 ...

  2. 信息学奥赛一本通 1329:细胞(evd)

    [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 0234500067 103456 ...

  3. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  4. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  5. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  6. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  7. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  8. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  9. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  10. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门

    [题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...

最新文章

  1. bug修复录-qq浏览器中post请求时body为空
  2. Value 'EN' violates facet information 'maxlength=1'
  3. 【LeetCode-SQL每日一练】—— 1179. 重新格式化部门表
  4. Linux 监控命令之 vmstat
  5. Python爬虫:该如何学习数据爬虫
  6. linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
  7. SPSS计算变量(图文+数据集)【SPSS 012期】
  8. 炮灰模型:对女生选择追求者的数学模型的建立-转
  9. centos刻录工具_CentOS7.0 U盘刻录工具正式版
  10. zabbix监控系统--详细安装教程
  11. sublime text豆沙绿,护眼自制主题
  12. 韩信点兵python算法_韩信点兵算法
  13. 表示自己从头开始的句子_从头开始励志的句子
  14. 主宰操作系统的经典算法
  15. Python爬虫:scrapy爬取斗鱼直播图片
  16. 【点云处理之论文狂读前沿版3】——Point Transformer
  17. 计算机系统重新之后为啥没声音,电脑重装系统后没声音怎么办 电脑重装系统后没声音解决方法...
  18. 半导体物理实验 02 - | 半导体霍尔效应
  19. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.13节使用绘图模式
  20. 信息安全工程——口令系统安全(理论)

热门文章

  1. 手把手教你用Jieba做中文分词
  2. 哪些数据库是行存储?哪些是列存储?有什么区别?
  3. python迭代法求平方根_1021: 迭代法求平方根
  4. GitHub 长期被中国人“霸榜”?看完榜单我呆了...
  5. JeecgBoot手机端安装配置流程
  6. 开发指南专题五:JEECG微云快速开发平台代码生成器
  7. 根据hibernate拦截器实现可配置日志的记录
  8. 第三章 对象与JSON
  9. Mac安装MATLAB 2017b
  10. Python模块开发【Distutils】