HDU - 1312 Red and Black(DFS)

2023-11-10

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)
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

#include<stdio.h>
#include<string.h>
char a[101][101];
int m,n,t;
int xy[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y)
{
	
	int i;
    for(i=0;i<4;i++)
    { 
		
		int x1 = x+xy[i][0];
        int y1 = y+xy[i][1];
		if(x1>=0&&x1<n&&y1>=0&&y1<m&&a[x1][y1]=='.')
		{
		a[x1][y1]='*';
		dfs(x1,y1);
	}
    } 
}

int main()
{
	
    while(1)
    {
		memset(a,0, sizeof(a));
		scanf("%d%d",&m,&n);
		if(m+n==0)
			break;
        int i,j,x,y;
		t=0;
		for(i=0; i<n; i++)
		{
			scanf("%s",a[i]);
            for(j=0; j<m; j++)
            {
                if(a[i][j]=='@')   
				{          
                    x=i;
					y=j;
				}

            }
		}
		t++;
		dfs(x,y);
		for(i=0; i<n; i++)
            for(j=0; j<m; j++)	
            	if(a[i][j]=='*')
            		t++; 
      
        printf("%d\n",t);
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDU - 1312 Red and Black(DFS) 的相关文章

随机推荐

  • 关于根轨迹对于控制系统的一点理解

    自动控制理论根轨迹的学习过程中 经常会遇到几个问题 为什么要用根轨迹法 为什么根轨迹法最终转化为调整增益K来反应系统的稳定性和动态性能 为什么根轨迹法用开环传递函数求解的却是闭环极点 盲目的借助于matlab进行根轨迹的计算和绘图 有时候往
  • MySQL采用B+树作为索引的原因

    MySQL采用B 树作为索引的原因 1 MySQL的索引结构是如何查询的 在MySQL中 存储的数据记录都是持久化到磁盘中的 数据包含索引和记录 当MySQL查询数据时 由于索引也是持久化在磁盘上面的 首先会从磁盘上读取索引到缓存中 然后再
  • 【计算机网络】JWT(JSON Web Token)初识

    JWT JSON Web Token 初识 JWT JSON Web Token 是目前最流行的跨域认证解决方案 1 跨域认证的问题 互联网服务离不开用户认证 一般流程是下面这样 用户向服务器发送用户名和密码 服务器验证通过后 在当前对话
  • jQuery实现MD5加密

    原文地址 http blog csdn net you23hai45 article details 52629234 1 问题背景 有两个输入框 一个输入明文 另一个输入框显示密文 2 实现源码 html view plain copy
  • Linux平台的IO操作

    什么是IO如何理解IO IO就是输入与输出 I Input 从键盘拷贝数据至内存中 O Output 从内存中拷贝数据到终端上 因为Linux平台基本思想为 一切皆文件 所以 对于IO可以再次理解位 I 从文件中拷贝数据到内存中去 O 从内
  • WebService 学习笔记之一 HelloWorld

    一 开发环境 我的开发环境是 MyEclipse 10 Apache cxf 2 3 0 相关jar包下载地址 http www apache org dist cxf 2 3 0 二 开发步骤 创建Server 1 新建一个Java工程C
  • Linux/Android 充电框架/流程分析 1

    1 内核注册供电设备 内核通过 devm power supply register 或者 power supply register 注册供电相关的设备 2 获取电量的方式 电量是电池相关的信息 所以 注册的供电设备为 battery 例
  • [深入研究4G/5G/6G专题-46]: 5G Link Adaption链路自适应-2-常见缩略语

    A CSI Aperiodic Channel Status Information 非周期性信道状态信息 AL Aggregation level for PDCCH 聚合等级 ATB Adaptive Transmission Band
  • 如何从一个git服务器仓库将项目迁移到另一个git服务器仓库

    最近服务器迁移涉及到代码也需要一块迁移 梳理了一些git服务迁移指令 希望大家共享 从服务器A迁移到服务器B 1 首先将服务器A上的代码进行备份 1 1 git备份指令 从A服务器 https gitlab xxxx cn 上clone代码
  • Kali环境下渗透目标(win7)虚拟机

    Kali环境下渗透目标 win7 虚拟机 注 此文章 是我看了CSDN上另一位博主的文章 我在自己在电脑上实验了一遍的结果 另外 本文仅供学习交流 用来做非法之事 本人概不负责 准备 1 在电脑上安装VMware 并下载安装虚拟机kali
  • pycharm运行YOLOv5 (一)

    登录github com search yolov5 查看选择各个版本 查看发布各个版本 点击下载版本 下载zip文件 解压之后导入pycharm 先看这个文件requirements txt 这是启动yolov5需要的各个库 pip in
  • docker启动rabbitmq后无法访问15672端口

    docker启动rabbitmq后无法访问15672端口 经查找资料得知 rabbitmq默认web界面管理插件是关闭的 只要通过命令开启就行 1 docker ps查看rabbitmq的id fb7a78201d31 2 命令进入容器do
  • vivado下载

    vitis vivado 2019 2百度网盘 链接 https pan baidu com s 11CvUL05o2NTRqN4PpnFG5Q 提取码 n82v vivado2018 2百度网盘 链接 https pan baidu co
  • javaEE 2019 10 24关于运算符 键盘录入数据

    运算符 对变量和常量的操作过程称为运算 对变量和常量进行操作的符号 运算符 算术运算符 加 减 乘 除 自增 自减 取模 字符串连接 赋值运算符
  • WEB前端 期末复习 2018.11

    WEB前端 期末复习 2018 11 名词解释部分 API Application Programming Interface 应用程序编程接口 是一些预先定义的函数 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力 而又
  • kafka不同的topic使用相同的group的问题

    前几天为了省事 在申请group的时候 就使用了原来的group 本来以为group从属于某一个topic topic不同 group之间相互不会影响 但实际情况不是这样的 kafka不同topic的consumer如果用的groupid名
  • android 下拉刷新 组件,Android实现简单的下拉刷新控件

    背景 列表控件在Android App开发中用到的场景很多 在以前我们用ListView GradView 现在应该大多数开发者都已经在选择使用RecyclerView了 谷歌给我们提供了这些方便的列表控件 我们可以很容易的使用它们 但是在
  • maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令

    DskipTests 不执行测试用例 但编译测试用例类生成相应的class文件至target test classes下 Dmaven test skip true 不执行测试用例 也不编译测试用例类 不执行测试用例 但编译测试用例类生成相
  • poll, select, epoll

    随着2 6内核对epoll的完全支持 网络上很多的文章和示例代码都提供了这样一个信息 使用epoll代替传统的poll能给网络服务应用带来性能上的提升 但大多文章里关于性能提升的原因解释的较少 这里我将试分析一下内核 2 6 21 1 代码
  • HDU - 1312 Red and Black(DFS)

    There is a rectangular room covered with square tiles Each tile is colored either red or black A man is standing on a bl