POJ 1979 Red and Black (DFS)

Time Limit: 1000MS

Memory Limit: 30000K

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)

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

Source

Japan 2004 Domestic

几天没A题了,先拿道水题热热手。

完整代码:

/*16ms,388KB*/

#include<cstdio>
#include<cstring>  

char grid[25][25];
bool vis[25][25];
int cnt, x, y;  

void dfs(int i, int j)
{
    if (grid[i][j] == '#' || vis[i][j]) return;
    vis[i][j] = true;
    ++cnt;
    dfs(i - 1, j); dfs(i + 1, j); dfs(i, j - 1); dfs(i, j + 1);
}  

int main()
{
    int i, j, xx, yy;
    while (scanf("%d%d\n", &x, &y), x)
    {
        memset(grid, '#', sizeof(grid));
        for (i = 1; i <= y; ++i)
        {
            for (j = 1; j <= x; ++j)
            {
                grid[i][j] = getchar();
                if (grid[i][j] == '@')
                    xx = i, yy = j;
            }
            getchar();
        }
        memset(vis, 0, sizeof(vis));
        cnt = 0;
        dfs(xx, yy);
        printf("%d\n", cnt);
    }
    return 0;
}

作者署名:csdn博客 synapse7

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索tiles
, data
, black
, Tile
, of
The
poj1979、poj dfs、flesh and blood 1979、dfs and similar、red and black,以便于您获取更多的相关知识。

时间: 2024-08-02 09:13:36

POJ 1979 Red and Black (DFS)的相关文章

POJ 1979 Red and Black(红与黑)

原文 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 on

HDOJ 1312 (POJ 1979) Red and Black

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 mo

POJ 1979

Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17061   Accepted: 8996 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

算法:poj 3628 Bookshelf 2(dfs, 01背包)

题目大意: 有n个数字(1-100W),现在有一个数b,1<=b<=s(s为n个数字之和).要从n 个数字中选择一些数字组合,有一写组合的数字之和x会大于等于b, 求所有x中x-b最小的是多少? 思路: 刚开始看到这题,发现数字这么大,以为内存不够不能用背包.而n最大才20,所以直接用 dfs+减枝0MS过了... 然后用背包,开了2000W+的数组,memset初始化,果断地MLE了...然后 看了下discuss,发现用memset会增加很多额外的内存. 于是改用for循环初始化,内存就够

poj 1724ROADS(bfs和dfs做法)

/* dfs比较好想,就是测试数据的问题,导致在遍历边的时候要倒着遍历才过! */ #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #define Max 0x3f3f3f3f using namespace std; struct node{ int D; int L, T; node(int D, int L,

POJ 3009 Curling 2.0 {深度优先搜索}

原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules are somewhat different from ours. The game is played on an ice game board on which a square mesh is marked. They use only a single stone. The purpose

&lt;font color=&quot;red&quot;&gt;[置顶]&lt;/font&gt;

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸,本博客会持续更新,感谢您的支持,欢迎您的关注与留言.博客有多个专栏,分别是关于 Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 . Android应用开发 ,而最近会添加的文章将主要是算法和Android,不过其它内容也会继续完善. About the Author 独立 Windows App 和

POJ题目分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford

poj分类

初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      (4)递推.      (5)构造法.(poj3295)      (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:      (1)图的深度优先遍历和广度优先遍历.      (2)最短路径算法(dijkstra,bellman-ford