当前位置: 首页 > news >正文

Red and Black (DFS)

 

有一个长方形的房间,覆盖了正方形的磁砖。每块磁砖的颜色,要么是红色,要么是黑色。一名男子站在一块黑色的磁砖上。他可以从一块磁砖移至相邻四块磁砖中的某一块。但是,他不允许在红色磁砖上移动,他只允许在黑色磁砖上移动。 

编写一个程序,使得他允许重复上述的移动,判断他所能到达的黑色磁砖的数量。 

输入

输入由多个数据集组成。数据集的起始行包含了两个正整数 W 和 H;W 和 H 分别是 x- 和 y- 方向的磁砖数量。W 和 H 不超过 20 。 

在数据集中,还有 H 行,每行包含了 W 个字符。每个字符按如下方式表示一块磁砖的颜色。 

'.' - 一块黑色的磁砖 
'#' - 一块红色的磁砖 
'@' - 一名男子,站在一块黑色磁砖上 (在一个数据集中,恰好出现一次) 

以包含两个 0 的一行,表示输入结束。 

输出

对于每个数据集,程序应当输出一行,包含他从初始磁砖所能抵达的磁砖数量 (包括初始磁砖自身)。

示例输入

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0

示例输出

45
59
6
13
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<set>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<algorithm>
#include<functional>
#include<sstream>
int W, H;
char z[21][21];

int f(int x, int y)
{
    if (x < 0 || x >= W || y < 0 || y >= H)
        return 0;
    if (z[x][y] == '#')
    {
        return 0;
    }
    else
    {
        z[x][y] = '#';
        return 1 + f(x - 1, y) + f(x + 1, y) + f(x, y - 1) + f(x, y + 1);
    }
}
int main(int argc, char* argv[])
{
    int i, j, num;
    while (scanf("%d%d", &H, &W) && W != 0 && H != 0)
    {
        for (i = 0; i < W; i++)
            scanf("%s", z[i]);

        for (i = 0; i < W; i++)
            for (j = 0; j < H; j++)
                if (z[i][j] == '@') printf("%d\n", f(i, j));
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/edych/p/7236323.html

相关文章:

  • eclipse实现JavaWeb项目 增量打包
  • Dubbo框架介绍与安装 Dubbo 注册中心(Zookeeper-3.4.6)
  • 鼠标悬停在图片时出现×。然后删除图片
  • Laravel的本地化
  • File:方法(具体)
  • bzoj 2510 弱题 矩阵乘
  • CentOS的进程管理二
  • 深入浅出iOS事件机制
  • phpStudy配置多站点多域名步骤,及遇到的403错误解决方式
  • 模拟ajax实现网络爬虫——HtmlUnit
  • 关于冰岛足球的段子
  • Hadoop简单介绍
  • 【菜鸟也疯狂UML系列】——概述
  • 最新发布:数据库防火墙技术市场调研报告
  • 《Android应用开发攻略》——1.4 在Eclipse中创建“Hello, World”应用程序
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android 控件背景颜色处理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • DataBase in Android
  • gcc介绍及安装
  • JS专题之继承
  • Objective-C 中关联引用的概念
  • orm2 中文文档 3.1 模型属性
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 安装python包到指定虚拟环境
  • 官方解决所有 npm 全局安装权限问题
  • 前端js -- this指向总结。
  • 我建了一个叫Hello World的项目
  • 追踪解析 FutureTask 源码
  • nb
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​如何在iOS手机上查看应用日志
  • !!Dom4j 学习笔记
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)理解angular中的module和injector,即依赖注入
  • (区间dp) (经典例题) 石子合并
  • (转)ABI是什么
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET Core 2.1路线图
  • .NET Core中的去虚
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • /proc/vmstat 详解
  • [ solr入门 ] - 利用solrJ进行检索
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C++]指针与结构体
  • [Django 0-1] Core.Handlers 模块
  • [LeetCode] 178. 分数排名
  • [LeetCode] 19. 删除链表的倒数第 N 个结点
  • [leetcode] Longest Palindromic Substring