NOI-1.8-17-最好的草-矩阵找最大连接井号-【递归】

17:最好的草

总时间限制: 
10000ms

单个测试点时间限制: 
1000ms

内存限制: 
65536kB
描述

奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。

在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。

例如,考虑如下5行6列的牧场地图

.#......#.....#..#...##..#....

这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。

输入
第一行包含两个整数R和C,中间用单个空格隔开。
接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )
输出
输出一个整数,表示草丛数。
样例输入
5 6
.#....
..#...
..#..#
...##.
.#....
样例输出
5
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
#include <ctype.h>

using namespace std;
char ma[101][101];

int co(int i, int j) {
    if(ma[i+1][j] == ‘#‘)   {
        ma[i+1][j] = ‘.‘;
        co(i+1, j);
    }
    if(ma[i-1][j] == ‘#‘)   {
        ma[i-1][j] = ‘.‘;
        co(i-1, j);
    }
    if(ma[i][j+1] == ‘#‘)   {
        ma[i][j+1] = ‘.‘;
        co(i, j+1);
    }
    if(ma[i][j-1] == ‘#‘)   {
        ma[i][j-1] = ‘.‘;
        co(i, j-1);
    }
    else{
        return 0;
    }
}

int main()  {

    int a, b;
    scanf("%d%d", &a, &b);
    for(int i = 0; i < a; i++)  {
        for(int j = 0; j < b; j++)  {
            // scanf("%c", &ma[i][j]);
            cin >> ma[i][j];
        }
    }
    int count = 0;
    for(int i = 0; i < a; i++)  {
        for(int j = 0; j < b; j++)  {
            if(ma[i][j] == ‘#‘) {
                co(i, j);
                count++;
            }
        }
    }
//    for(int i = 0; i < a; i++)  {
//        for(int j = 0; j < b; j++)  {
//            printf("%c", ma[i][j]);
//        }
//        printf("\n");
//    }
    printf("%d\n", count);

    return 0;
}

一直对递归有些恐惧,正好用这道题练手

时间: 2024-08-24 12:25:29

NOI-1.8-17-最好的草-矩阵找最大连接井号-【递归】的相关文章

矩阵连乘(动态规划非递归)

对于矩阵连乘机问题就不概述了,主要是找出最佳的结合方式使得整个式子的运算次数最少. 对于这个问题之所以用动态规划的原因点如下: 第一:由于矩阵连乘机本身可以划分为若干个子矩阵链连乘机,而且若干个子矩阵链的最优解组合起来就是原矩阵链的最优解. 第二:对于原矩阵链的不同划分中个子问题是存在重叠子问题. 所以当此问题用动态规划算法来解决时就会变得很简单,算法的精髓就是从子问题入手.自底向上一步一步的由子问题的最优解去找到更复杂的大问题的最优解, 当循环到原问题时得出即为原为题的最优解:而且在自底向上的

【不可能的任务17/200】bzoj1009矩阵快速面+kmp

其实kmp真的很次要,求长度为20的kmp感觉真的有点杀鸡用牛刀 这题思路相当明确:一看题就是数位dp,一看n的大小就是矩阵 矩阵的构造用m*m比较方便,本来想写1*m的矩阵乘m*m的,但是感觉想起来太麻烦就偷懒,没想到1A了 log的速度的确可以,87ms贼快,好久没见这么短的运行时间了 1 #include <cstdio> 2 int n,m,mod,k; 3 char ch; 4 int a[100],ne[100]; 5 int ans[100][100],t[100][100],z

洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】

题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入输出格式 输入格式: 整数N(1≤N≤10000000) 输出格式: 表中的第N项 输入输出样例 输入样例#1: 复制 7 输出样例#1: 复

17.07.29 分组函数 多表连接 子查询

分组函数: 将得到的原始数据进行进一步的处理 count 对非空的数值做统计 只有 count(*) 不去除空值 处理过程: select      From from where group by sum having

使用 Apache 服务部署静态网站

1.网站服务程序 Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务.Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速.可靠.简单的API扩展.Apache也是RHEL 5.6.7系统中默认的Web服务程序. 第一步:把光盘设备中的系统镜像挂载到 /media/cdrom 目录. 第二步:使用 Vim 编辑器创建 Yum 仓库的配置文件. 第三步:安装 Apache 服务程序.使用yum命令进行安装时,跟在命令后面的Apach

使用Apache服务部署静态网站。

1.安装Apache服务程序,命令后面的Apache服务的软件包名称为httpd.2.httpd服务程序并将其加入到开机启动项中3.在浏览器(这里以Firefox浏览器为例)的地址栏中输入http://127.0.0.1并按回车键,就可以看到用于提供Web服务的httpd服务程序的默认页面了. 4.打开httpd服务程序的主配置文件,将约第119行用于定义网站数据保存路径的参数DocumentRoot修改为/home/wwwroot,将第124行用于定义目录权限的参数Directory后面的路径

使用Apache部署静态网站

Https http 只是协议Nginx 和Apache是linux中的web服务IIS是windows系统默认的web服务进程,有web .ftp .nmtp . smtp服务未来流行的是Nginx 安装Apache服务,注意是httpd 重启服务:systemctl s tart httpd设置开机自启:systemctl enable httpd 在本机wbe页面输入ip 参数默认为/var/www/html中名字为index.html写入内容,替换掉页面 创建网站数据的保存目录,并创建首

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

Python实现顺时钟回形矩阵

无意间在网上看到了一个面试题是,写出一个回形矩阵.实现的效果大致如下: [ 1,   2,   3,   4, 5] [16, 17, 18, 19, 6] [15, 24, 25, 20, 7] [14, 23, 22, 21, 8] [13, 12, 11, 10, 9] 因为日常都是使用Python,刚开始觉得使用list的append方法就可以做出来,动手一下发现还是不行的.后来,觉得应该先根据参数容量制作一个list,用list的替换方法来做替换.处理的过程中,还是发现有很多思维断掉的