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 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
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
char s[25][25];
bool visit[25][25];
int col,row;
int ans;
void dfs(int x,int y)
{
	visit[x][y]=1;
	if(x>0&&!visit[x-1][y]&&s[x-1][y]=='.')
	{
        ans++;
		dfs(x-1,y);
	}
	if(y>0&&!visit[x][y-1]&&s[x][y-1]=='.')
	{
		ans++;
		dfs(x,y-1);
	}
	if(x+1<row&&!visit[x+1][y]&&s[x+1][y]=='.')
	{
		ans++;
		dfs(x+1,y);
	}
	if(y+1<col&&!visit[x][y+1]&&s[x][y+1]=='.')
	{
		ans++;
		dfs(x,y+1);
	}
}
int main()
{
    int i,j,k,T;
    int p,q;
    while(cin>>col>>row,row||col)
    {
        ans = 1;
        memset(s,0,sizeof(s));
        memset(visit,0,sizeof(visit));
        for(i=0;i<row;i++)
        {
            //getchar();
            for(j=0;j<col;j++)
            {
                cin>>s[i][j];
                if(s[i][j]=='@')
                {
                    p = i;
                    q = j;
                }
            }
        }
        dfs(p,q);
        cout<<ans<<endl;
    }
    system("pause");
    return 0;
}

 

//小花熊的

#include<stdio.h>
 char m[20][20];
 int r,c,count;
 void cnt(int i,int j)//统计连续黑砖的块数
 {
     if(m[i][j]=='#'||(i<0||j<0)||(i>r-1||j>c-1))//边界条件,除去
         return;
     m[i][j]='#';//发现了一个新的黑砖,置'#',下次不在访问
     count++;   //count+1
     cnt(i,j-1);//往左寻找
     cnt(i-1,j);//往上寻找
     cnt(i,j+1);//往右寻找
     cnt(i+1,j);//往下寻找
 }
 int main()
 {
     int i,j,x,y;
     while(scanf("%d%d",&c,&r),r||c){
         for(count=i=0;i<r;++i){
             getchar();
             for(j=0;j<c;++j){
                 m[i][j]=getchar();
                 if(m[i][j]=='@'){//查找起始点
                     x=i;
                     y=j;
                 }
             }
         }
         cnt(x,y);
         printf("%d\n",count);
     }
     return 0;
 }

  

 

时间: 2024-10-23 16:31:53

POJ 1979的相关文章

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 ca

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

POJ:DNA Sorting 特殊的排序

Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to

POJ 1001 Exponentiation 无限大数的指数乘法 题解

POJ做的很好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. 本题对程序健壮性的考查到达了变态级别了. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ 某人贴出的测试用例数据地址: http://poj.org/showmessage?message_id=76017 有