1329细胞

1329细胞这篇文章是关于一个矩形阵列中细胞的问题 阵列由数字 00 到 99 组成 数字 11 到 99 代表细胞 细胞的定义是沿着细胞数字上下左右的数字仍然是同一细胞 文章给出了解决这个问题的代码 并输出了结果

题目

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

【题目描述】 

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

阵列

4 10 0   0000000089

有44个细胞。

【输入】

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

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

【输出】

细胞个数。

【输入样例】

4 10 0   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){ queue<node>q;//结构体队列 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<n&&yy>=0&&yy<m&&mk[xx][yy]==0&&a[xx][yy]!='0'&&a[xx][yy]<='9'){ mk[xx][yy]=1;//标记 q.push((node){xx,yy});//入队 } } } }

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

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

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

for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]!='0'&&mk[i][j]==0){ res+=1; mk[i][j]=1; bfs(i,j); } } }

最后输出res。

cout<<res<<endl;

完整代码

#include<iostream> #include<queue> 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){ queue<node>q; 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<n&&yy>=0&&yy<m&&mk[xx][yy]==0&&a[xx][yy]!='0'&&a[xx][yy]<='9'){ mk[xx][yy]=1; q.push((node){xx,yy}); } } } } int main(){ cin>>n>>m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]!='0'&&mk[i][j]==0){ res+=1; mk[i][j]=1; bfs(i,j); } } } cout<<res<<endl; return 0; }

新手上路,请多多指教。

今天的文章 1329细胞分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-05 17:17
下一篇 2024-12-05 17:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/78569.html