洛谷 P1451 求细胞数量

2019-06-03

题目: 洛谷 P1451 求细胞数量: https://www.luogu.org/problemnew/show/P1451


题目描述

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)?

输入输出格式

输入格式:

输入:整数m,n(m行,n列)

矩阵

输出格式:

输出:细胞的个数

输入输出样例

输入样例#1:
4  10
0234500067
1034560500
2045600671
0000000089
输出样例#1:
4

ios::sync_with_stdio(0),cin.tie(0);大家都知道这句话可以增快cin,cout的速度。
但此时需要特别注意
ios::sync_with_stdio(0),使用本行代码时cin与scanf不能混用!!否则会有奇怪的错误。
cin.tie(0),使cin与cout的绑定接触,所以cout可以正常使用。
%*d 输入*位数字。
 1 //
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 typedef long long ll;
 5 #define ri register ll
 6 
 7 ll m,n,tot;
 8 ll a[105][105];
 9 bool vis[105][105];
10 ll wayx[]={1,-1,0,0};
11 ll wayy[]={0,0,1,-1};
12 
13 void dfs(ll x,ll y)
14 {
15     vis[x][y]=1;
16     
17 //    cout<<x<<" "<<y<<" -- "<<tot<<'\n';
18     for(ri i=0;i<4;i++)
19     {
20         ri xx=x+wayx[i],yy=y+wayy[i];
21         if(xx<1 || xx>m || yy<1 || yy>n)continue;
22         if(vis[xx][yy] || !a[xx][yy])continue;
23         dfs(xx,yy);
24     }
25     return;
26 }
27 
28 signed main()
29 {
30     //ios::sync_with_stdio(0),cin.tie(0);
31     //cin>>m>>n;
32     scanf("%lld%lld",&m,&n);
33     for(ri i=1;i<=m;i++)
34     {
35         for(ri j=1;j<=n;j++)
36         {
37             scanf("%1lld",&a[i][j]);
38         }
39     }
40     for(ri i=1;i<=m;i++)
41     {
42         for(ri j=1;j<=n;j++)
43         {
44             if(vis[i][j] || !a[i][j])continue;
45             dfs(i,j);
46             tot++;
47         }
48     }
49     cout<<tot<<'\n';
50     return 0;
51 }
52 //

 

 

posted @ 2019-06-03 13:52  敲可耐的螺旋藻  阅读(109)  评论(0编辑  收藏  举报