[HDUOJ1312]Red And Black (经典的DFS)
Red and Black
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 16129    Accepted Submission(s): 9939
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 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) 
each data set, your program should output a line which contains the
number of tiles he can reach from the initial tile (including itself).
import java.util.Scanner;
public class Main {
    public static int count = 0;
    public static int maxN = 0;
    public static int maxM = 0;
    public static void main( String[] args ) {
        Scanner sc = new Scanner( System.in );
        int n, m;
        while( sc.hasNext() ) {
            count = 0;
            n = sc.nextInt();
            m = sc.nextInt();
            int si = 0;
            int sj = 0;
            if( n == 0 || m == 0 )
                return;
            else {
                maxN = n;
                maxM = m;
                char[][] maps = new char[ m ][ n ];
                for( int i = 0; i < m; i++ ) {
                    String s = sc.next();
                    for( int j = 0; j < s.length(); j++ ) {
                        char c = s.charAt( j );
                        maps[ i ][ j ] = c;
                        if( c == '@' ) {
                            si = i;
                            sj = j;
                        }
                    }
                }
                dfs( maps, si, sj );
                System.out.println( count );
            }
        }
    }
    private static void dfs( char[][] maps, int i, int j ) {
        if( !cons( i, j ) )
            return;
        if( maps[ i ][ j ] == '@' || maps[ i ][ j ] == '.' ) {
            count++;
            maps[ i ][ j ] = '#';
            dfs( maps, i + 1, j );
            dfs( maps, i - 1, j );
            dfs( maps, i, j + 1 );
            dfs( maps, i, j - 1 );
        } else {
            return;
        }
    }
    public static boolean cons( int i, int j ) {
        if( i < 0 || j < 0 || i >= maxM || j >= maxN )
            return false;
        return true;
    }
}
[HDUOJ1312]Red And Black (经典的DFS)的更多相关文章
- HDU 1312 Red and Black --- 入门搜索 DFS解法
		
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
 - Red and Black(BFS or DFS)                                                    分类:            dfs             bfs             2015-07-05 22:52    2人阅读    评论(0)    收藏
		
Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...
 - 题解报告:hdu 1312 Red and Black(简单dfs)
		
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
 - 78. Subsets(中等,集合的子集,经典问题 DFS)
		
Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...
 - 蓝桥杯 历届试题 约数倍数选卡片 (经典数论+DFS)
		
闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可 ...
 - POJ 1321 棋盘问题(非常经典的dfs,入门题)
		
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 66277 Accepted: 31639 Descriptio ...
 - poj(1011)——Sticks(经典的dfs+剪枝)
		
题目的大致意思是: 如今有n根木棍,然后须要把它们拼成相同长度的木棍,问满足这个条件的最短的长度是多少? 想法嘛:那肯定是dfs把长度搜一遍就好,但问题的关键是这里会超时.那么就要用到剪枝的原理了. ...
 - POJ 1979 Red and Black (zoj 2165) DFS
		
传送门: poj:http://poj.org/problem?id=1979 zoj:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problem ...
 - HDU 1312 Red and Black(经典DFS)
		
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 一道很经典的dfs,设置上下左右四个方向,读入时记下起点,然后跑dfs即可...最后答 ...
 
随机推荐
- js模块化开发——require.js的用法详细介绍(含jsonp)
			
RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script>标签脚本加载步骤.可以用它回事.优化代码,但其主要的目的还是为了代码的模块化.它鼓励在使用脚本以moudle ...
 - Extjs换肤+cookie皮肤记忆功能
			
http://www.myext.cn/kaifa/a_102.html Ext之家 <title>无标题页</title> <link rel=" ...
 - SVN官方版本下载地址
			
TortoiseSVN 客户端 & Language packs 语言包 : https://tortoisesvn.net/downloads.html VisualSVN 插件官方地址: ...
 - 移动设备应用程序中支持多个屏幕大小和 DPI 值
			
支持多个屏幕大小和 DPI 值的指导原则 要部署独立于平台的应用程序,应了解不同的输出设备.设备可以具有不同的屏幕大小或分辨率以及不同的 DPI 值或密度. Flex 工程师 Jason SJ 在他的 ...
 - WinMerge文件编码设置
			
http://blog.sina.com.cn/s/blog_7575fab10101o0na.html 系统默认是System codepage,我们要选用Custom codepage.值得注意的 ...
 - QJsonObject和QJsonArray的巨坑
			
最近用Qt的QJsonObject和QJsonArray当做类变量来存储运行信息,发现这两货真的是巨坑.让人有一种JJ fly的感觉/(ㄒoㄒ)/~~. 写了个例子来说明下: MainWindow:: ...
 - Jsoup后台解析html、jsp网页
			
在一些网络爬虫或者从第三方网站抓取信息的程序都面临1个问题,如何从网页中把所需的信息提取出来,Jsoup是个比较好的选择,它能把网站内容解析成Document,再从document中取element就 ...
 - 锁 和 CopyOnWrite的实现
			
1.普通锁 只有lock功能, Java实现:ReentrantLock lock = new ReentrantLock(); lock和unlock: lock.lock(); lock.unlo ...
 - 蓝桥网试题 java 基础练习 十六进制转八进制
			
- -------------------------------------------------------------------------------------------------- ...
 - .NET Core 最小化发布
			
.NET Core 应用最小化独立部署发布,.NET Core 默认应用独立发布,大概占用50m左右的空间,不同的系统大小有所区别. .NET Core 的发布之前我也有所介绍,.NET Core 跨 ...