zoukankan      html  css  js  c++  java
  • 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
    ",&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 }
  • 相关阅读:
    git clone SSL error解决
    day11_文件读写
    python练习day0120
    day12_文件读写_return
    GIS开发常用算法原理分析
    SoapToolkit3.0分发技术
    平台符合性审查测试工具安装教程
    MapX编程详解(C++)MapX发布技术
    Google地图定位偏移矫正
    串口通信编程多线程异步方式
  • 原文地址:https://www.cnblogs.com/jiuduSHENBENG/p/9491856.html
Copyright © 2011-2022 走看看