hdu 1312 Red and Black

简介: 一个人从@点出发,求他所能到达的'.'的数目,'#'不可走,@本身算1个点。思路:搜索入门题。

Red and Black

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 258   Accepted Submission(s) : 139


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

.#.........

.#.#######.

.#.#.....#.

.#.#.###.#.

.#.#..@#.#.

.#.#####.#.

.#.......#.

.#########.

...........

11 6

..#..#..#..

..#..#..#..

..#..#..###

..#..#..#@.

..#..#..#..

..#..#..#..

7 7

..#.#..

..#.#..

###.###

...@...

###.###

..#.#..

..#.#..

0 0


 


Sample Output

 


  45

59

6

13


 


Source


Asia 2004, Ehime (Japan), Japan Domestic

题意:一个人从@点出发,求他所能到达的'.'的数目,'#'不可走,@本身算1个点。

思路:搜索入门题。


#include<stdio.h>
#include<string.h>
char as[22][22];
int hash[22][22];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int w,h,ans;
void dfs(int x,int y)
{
  int i,xx,yy;
  hash[x][y]=1;
  for(i=0;i<4;i++)
  {
    xx=x+dx[i];
    yy=y+dy[i];
    if(xx>=0&&xx<h&&yy>=0&&yy<w&&as[xx][yy]=='.'&&!hash[xx][yy])
    {
      ans++;
      dfs(xx,yy);
    }
  }
}
int main()
{
  int i,j,x,y;
  while(scanf("%d%d",&w,&h)!=EOF)
  {
    if(w==0&&h==0)
      break;
    for(i=0;i<h;i++)
      scanf("%s",as[i]);
    for(i=0;i<h;i++)
    {
      for(j=0;j<w;j++)
      {
        hash[i][j]=0;
        if(as[i][j]=='@')
        {
          x=i;
          y=j;
        }
      }
    }
    ans=1;
    dfs(x,y);
    printf("%d\n",ans);
  }
  return 0;
}


相关文章
|
25天前
|
Java
hdu-1312-Red and Black
hdu-1312-Red and Black
17 0
|
11月前
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 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
60 0
|
10月前
UVa837 - Light and Transparencies(排序)
UVa837 - Light and Transparencies(排序)
41 0
HDOJ 1312 (POJ 1979) Red and Black
HDOJ 1312 (POJ 1979) Red and Black
96 0
|
机器学习/深度学习
HDOJ/HDU 1556 Color the ball(树状数组)
HDOJ/HDU 1556 Color the ball(树状数组)
89 0