fans

 
  试题编号:0610收 藏  
D模拟101-1::球迷
难度级别:A; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述

一个球场C的球迷看台可容纳M*N个球迷。官方想统计一共有多少球迷群体,最大的球迷群体有多少人。

球迷选座特性:同球迷群体会选择相邻座位,不同球迷群体选择不相邻的座位。(相邻包括前后相邻、左右相邻、斜对角相邻);

给定一个M*N的二维球场,0代表该位置没人,1代表该位置有人,希望输出球队群体个数P,最大的球队群体人数Q。

输入
第一行,2个数字,M、N,使用英文逗号隔开。
接下来M行,每行N个数字,使用英文逗号隔开。
输出
一行,2数字,P和Q。
输入示例
10,10
0,0,0,0,0,0,0,0,0,0
0,0,0,1,1,0,1,0,0,0
0,1,0,0,0,0,0,1,0,1
1,0,0,0,0,0,0,0,1,1
0,0,0,1,1,1,0,0,0,1
0,0,0,0,0,0,1,0,1,1
0,1,1,0,0,0,0,0,0,0
0,0,0,1,0,1,0,0,0,0
0,0,1,0,0,1,0,0,0,0
0,1,0,0,0,0,0,0,0,0
输出示例
6,8
其他说明
对于100%的数据,1<=M,N<=3e3。

 

                这道题是本蒟蒻昨天考试的一道题,拿了满分(开心)。

                这道题是一道搜索,深搜和广搜都可以。我写的是深搜,不用回溯。然后上参考代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,ans,sum,maxn;
 4 char a[3005][3005];
 5 bool f[3005][3005];
 6 void dfs(int x,int y)
 7 {
 8     if(x<1||x>m||y<1||y>n||f[x][y]==true||a[x][y]=='0') return;//返回条件 
 9     sum++;//记录最大球迷群体 
10     f[x][y]=true;//标记 
11     dfs(x-1,y-1);//向八个方向搜索 
12     dfs(x-1,y);
13     dfs(x-1,y+1);
14     dfs(x,y-1);
15     dfs(x,y+1);
16     dfs(x+1,y-1);
17     dfs(x+1,y);
18     dfs(x+1,y+1);
19 }
20 int main()
21 {
22     //freopen("fans.in","r",stdin);
23     //freopen("fans.out","w",stdout);
24     scanf("%d,%d\n",&m,&n);//输入长和宽 
25     for(int i=1;i<=m;i++)
26     {
27         for(int j=1;j<=n;j++) 
28         {
29             char ch;
30             a[i][j]=getchar();//用getchar读入,先读入数,再读入逗号和换行 
31             ch=getchar();
32         }
33     }
34     for(int i=1;i<=m;i++)
35     {
36         for(int j=1;j<=n;j++)
37         {
38             if(a[i][j]=='1'&&f[i][j]==false)//如果是球迷并且没搜过就搜索        
39             {
40                 ans++;//统计有几个球迷群体 
41                 dfs(i,j);//搜索 
42                 maxn=max(maxn,sum);//统计最大球迷群体 
43                 sum=0;//把计数的变量赋成零 
44             }
45         }
46     }
47     printf("%d,%d",ans,maxn);//输出有几个球迷群体和最大球迷群体 
48     return 0;//完美结束 
49 }

 

转载于:https://www.cnblogs.com/jiuduSHENBENG/p/9491856.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值