hdu1312(Red and Black)

点击打开杭电1312

Problem Description

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
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#[email protected]#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
[email protected]
###.###
..#.#..
..#.#..
0 0

Sample Output

45
59
6
13
import java.util.Scanner;

public class P1312 {
	public static int n,m,count;
	public static int[][] dir={{1, 0}, {0, -1}, { -1, 0}, {0, 1}};//朝四个方向遍历
	public static char[][] map=new char[30][30];//地图
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			count=0;
			m=sc.nextInt();
			n=sc.nextInt();
			if(m==0&&n==0){
				break;
			}
			for(int i=0;i<n;i++){
				String s=sc.next();
				map[i]=s.toCharArray();
			}
			boolean sign=false;
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(map[i][j]=='@'){//先找到@这点,然后将其作为起点朝四个方向递归遍历
						sign=true;//优化,因为只有一个@,所以只要进来,就不需要找循环找@了
						DFS(i,j);
					}
					if(sign){//优化
						break;
					}
				}
			}
			System.out.println(count+1);
		}
	}
	private static void DFS(int a, int b) {
		int x,y;
		for(int i=0;i<4;i++){
			x=a+dir[i][0];
			y=b+dir[i][1];
			if(x>=0&&y>=0&&x<n&&y<m&&map[x][y]=='.'){
				count++;
				map[x][y]='#';//直接把找到的'.' 变为#,这样就避免visit标记地图了
				DFS(x,y);
			}
		}
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 06:31:52

hdu1312(Red and Black)的相关文章

红黑树(Red Black Tree)

介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和 Robert Sedgewick改成一个比较摩登的名字:红黑树. 红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高

数据结构 - 红黑树(Red Black Tree)插入详解与实现(Java)

最终还是决定把红黑树的篇章一分为二,插入操作一篇,删除操作一篇,因为合在一起写篇幅实在太长了,写起来都觉得累,何况是阅读并理解的读者. 红黑树删除操作请参考 数据结构 - 红黑树(Red Black Tree)删除详解与实现(Java) 现在网络上最不缺的就是对某个知识点的讲解博文,各种花样标题百出,更有类似"一文讲懂xxx","史上最简单的xxx讲解","xxx看了还不懂你打我"之类云云.其中也不乏有些理论甚至是举例都雷同的两篇不同文章,至于作

红帽(Red Hat Linux)下SVN服务器的安装与配置

转:http://www.cnblogs.com/xd502djj/archive/2011/01/21/1941404.html 第一章 安装 1. 采用源文件编译安装.源文件共两个,为:subversion-1.6.1.tar.gz (subversion 源文件)subversion-deps-1.6.1.tar.gz (subversion依赖文件)注意文件版本必须一致,否则很容易产生各种奇怪的问题. 2. 上传以上两个文件到服务器上,解压.解压命令为: 1 tar xfvz subve

简单聊聊红黑树(Red Black Tree)

? 前言 众所周知,红黑树是非常经典,也很非常重要的数据结构,自从1972年被发明以来,因为其稳定高效的特性,40多年的时间里,红黑树一直应用在许多系统组件和基础类库中,默默无闻的为我们提供服务,身边有很多同学经常问红黑树是怎么实现的,所以在这里想写一篇文章简单和大家聊聊下红黑树 小编看过很多讲红黑树的文章,都不是很容易懂,主要也是因为完整的红黑树很复杂,想通过一篇文章来说清楚实在很难,所以在这篇文章中我想尽量用通俗口语化的语言,再结合 Robert Sedgewick 在<算法>中的改进的版

Linux中的目录功能(Red Hat 7)

目录的基本功能: /bin:存放普通用户使用的命令 /sbin:存放管理员可以执行的命令 /home:存放普通的家目录 如张三家目录为/home/zhangsan /root:管理员的家目录 /etc:存放配置文件的目录 /boot:存放与启动相关的文件 /usr:用户自定义的相关程序或文件 /proc:内核参数.硬件参数相关文件的存放目录 /var:内容经常变化的文件存放目录,如日志 /tmp:临时文件的存放目录 /run:存放进程文件

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.                          这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.                          在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的

1-10-RHEL6.3-linux启动原理及各种故障案例分析(Red Hat Enterprise Linux Server6.3)@树袋飘零

本节内容: 一.Linux启动过程 二.常见的启动故障排除 三.救援模式 1.系统瘫痪了救援模式下拷贝数据 2.grub重新安装 3.系统无法启动--磁盘资源耗尽 4.文件删除空间不释放的问题(拓展) 一:linux启动过程详解 加载BIOS的硬件信息.因为BIOS中包含了硬件的各种信息(硬盘信息.CPU.内存.时钟.设备启动顺序)等等,根据设置的开机启动项 FIRST 引导启动,如果FIRST引导为hardware的话,接着进入下一步 读取硬盘中MBR也就是Master Boot Recode

5-1-RHEL6.3正则表达式(Red Hat Enterprise Linux Server6.3)@树袋飘零

基本正则表达式(Regular Expression) . 匹配任意字符 \{n,\} 匹配前一字符重复至少n次 * 重复次数0次或多次 \{n\} 匹配前字符重复n次 .* 匹配任意多个任意字符 \(..\) 标记匹配字符 [] 匹配集合中的任意单个字符 \n 调用上个标记 [^] 集合取反 \w 匹配文字数字符 [n-m] 匹配n到m的范围如:[a-g] \W 取反\w ^ 匹配开头字符串 \< 匹配单词开头行 & 匹配结尾字符串 \> 匹配单词结尾行 \ 转义 5-1-RHEL6

hdu 1312 Red and Black(BFS水题)

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9684    Accepted Submission(s): 6021 Problem Description There is a rectangular room, covered with square tiles. Each tile is colore