GDUT - 专题学习1 A - Red and Black
A - Red and Black
题目
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles.
Write a program to count the number of black tiles which he can reach by repeating the moves described above.
Input
The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.
There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.
'.' - a black tile
'#' - a red tile
'@' - a man on a black tile(appears exactly once in a data set)
The end of the input is indicated by a line consisting of two zeros.
Output
For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
大致题意
输入两个正整数W和H,再给出一个W×H的二维字符数组,其中 '.' 代表黑色瓷砖,'#' 代表红色色瓷砖,'@' 代表人目前所在位置,人可以移动到相邻的四块黑色瓷砖上,但不能移动到红色瓷砖上。求该人最多可以到达的黑色瓷砖的数量。
思路
首先我们可以在输入二维字符数组的时候就找到 ‘@’ 的所在坐标,接着再将该坐标放入dfs中搜索与其联通的 ‘.’ ,将所有与 ‘@’ 联通的 ‘.’ 全部变为 除了以上三种字符 的任意字符,在这里我是将其变为 '!' ,注意人只能上下左右的走,不能斜着走。最后再统计一遍 '!' 的数量即可。
代码
#include<iostream>
using namespace std;
int n, m, xp, yp, ans;
char a[25][25];
void dfs(int x, int y)
{if (x<0 || y<0 || x>n || y>m){return;}if (a[x][y] == '.' || a[x][y] == '@')//在这里我顺便把‘@’也一起处理了{//先将合法的位置变为‘!’a[x][y] = '!';//将此位置的上下左右都遍历一遍dfs(x - 1, y);dfs(x + 1, y);dfs(x, y - 1);dfs(x, y + 1);}return;
}
int main()
{while (1){ans = 0;cin >> m >> n;if (!n && !m)//结束条件判断,如果n==0并且m==0就结束输入{break;}//注意每次输入都要将二维字符数组a给重置一下,否则上次输入的数据可能会影响到这次的结果for (int i = 0; i < 25; ++i){for (int j = 0; j < 25; ++j){a[i][j] = '#';}}for (int i = 0; i < n; ++i){for (int j = 0; j < m; ++j){cin >> a[i][j];if (a[i][j] == '@'){xp = i, yp = j;//记录‘@’的坐标}}}dfs(xp, yp);for (int i = 0; i < n; ++i){for (int j = 0; j < m; ++j){if (a[i][j] == '!')//统计数量{++ans;}}}cout << ans << endl;}return 0;
}
GDUT - 专题学习1 A - Red and Black相关推荐
- GDUT - 专题学习3 G - 食物链
题目 如图所示为某生态系统的食物网示意图,据图回答此题. 现在给你 n 个物种和 m 条能量流动关系,求其中的食物链条数. 物种的名称为从 1 到 n 的编号. mm 条能量流动关系形如 a1 b1 ...
- GDUT - 专题学习1 I - 滑动窗口
I - 滑动窗口 题目 原题来自:POJ 2823 给一个长度为 N 的数组,一个长为 K 的滑动窗体从最左端移至最右端,你只能看到窗口中的 K 个数,每次窗体向右移动一位,如下图: 你的任务是找出窗 ...
- GDUT - 专题学习1 C - 马走日
C - 马走日 题目 马在中国象棋以日字形规则移动. 请编写一段程序,给定 n×m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. ...
- GDUT - 专题学习1 D - 一维前缀和
D - 一维前缀和 题目 一天,在宿舍睡觉的你,突然梦到了游戏之神,他说:去玩<极限脱出>吧,这部作品的剧情和世界观绝对会带来很大的震撼,值得一玩. 对了,这部作品的第一代发布在nds上, ...
- GDUT - 专题学习2 C - 开餐馆
C - 开餐馆 题目 蒜头君想开家餐馆. 现在共有 n 个地点可供选择.蒜头君打算从中选择合适的位置开设一些餐馆.这 n 个地点排列在同一条直线上.我们用一个整数序列 m1,m2,...mn 来 ...
- 莫比乌斯反演专题学习笔记
莫比乌斯反演专题学习笔记 本文记录一些和莫反有关的内容的笔记 可能存在诸多谬误,阅读时请谨慎分析 若发现文中有谬误,如您愿意,恳请您向我指出,不胜感激! 为什么要学莫比乌斯反演? 解决一类与狄利克雷卷 ...
- Python模块EasyGui专题学习
Python模块EasyGui专题学习 1.msgbox(msg,title,ok_button="OK",image="",root=None) 代码 imp ...
- 【响应式编程的思维艺术】 (1)Rxjs专题学习计划
[摘要] 请暂时忘掉你的对象,感受一切皆流的世界. 一. 响应式编程 响应式编程,也称为流式编程,对于非前端工程师来说,可能并不是一个陌生的名词,它是函数式编程在软件开发中应用的延伸,如果你对函数式编 ...
- 20210501:字符串与哈希表力扣专题学习记录
字符串与哈希表力扣专题学习记录 题目 思路与算法 代码实现 写在最后 题目 字母异位词分组 无重复字符的最长子串 重复的DNA序列 最小覆盖子串 思路与算法 字母异位词分组 : 按照字母序排序后再映射 ...
最新文章
- F5 network
- Vysor_v1.6.9
- How to be a hacker
- 如何看Cortex-M系列处理器差异与共性?技术老司机Joseph带你飞
- 为什么要使用Entity Framework
- 分时系统的用户具有独占性,因此一个用户可以独占计算机系统的资源.,课件2016计算机操作系统试题库(判断).doc...
- App开发流程之创建项目和工程基本配置
- 【华为云技术分享】当我们在谈论卡片时,我们到底在谈论什么?
- java分布式(java反汇编)
- linux安装 web2py,TurnkeyLinux上用于Web2Py到MySQL的DAL连接字符串
- 6位行政区划代码与4位银行地区代码对应表
- 阿里Java开发规范IDEA开发插件
- 2019安徽省程序设计竞赛 D.自驾游(最短路)
- Origin画图技巧之回归(标准值与预测值)
- Python实现图像的手绘效果
- 短信验证(吉信通),邮箱验证
- 华为云服务器默认jdk版本,华为云服务器centos7.3 安装jdk
- 基于OpenCV做图像数据增强(平移、镜像、缩放、旋转、仿射)
- 一曲京声人去远——纪念刘大中校友100周年诞辰
- NIO效率高的原理之零拷贝与直接内存映射