zoukankan      html  css  js  c++  java
  • POJ 1979 Red and Black

    Red and Black
    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 21482   Accepted: 11488

    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

    思路 :简单的深搜
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    int r,c;
    char a[200][200];
    int vis[200][200];
    int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    int sum;
    
    void dfs(int i,int j)
    {
                 
      //if(a[i][j]=='#'||(vis[i][j])||(i<0||j<0||(i>r-1||j>c-1)))
      //return;
      //else 
      //{
          a[i][j]='#';  
          sum++;                                           
      for(int k = 0;k < 4;k++)
      {
             int x = i+dir[k][0];
             int y = j+dir[k][1];
             if(a[x][y]=='.'&&!vis[x][y]&&x>=0&&y>=0&&x<=r-1&&y<=c-1)  
            {
               dfs(x,y);
               vis[x][y]=1;
             }
      } 
      //} 
      
      
    }
    int main()
    {
       int i,j,x,y;
       while(scanf("%d%d",&c,&r),r||c) 
       { 
              sum=0;
              memset(vis,0,sizeof(vis));
              memset(a,0,sizeof(a));
                                       
          for(i=0;i<r;i++)
          {
               getchar();
            for(j=0;j<c;j++)
            {
                 a[i][j] = getchar();
                 if(a[i][j]=='@')
                 {
                    x=i;
                    y=j;                
                 }          
            }
           } 
           //count=0;
           dfs(x,y); 
           cout<<sum<<endl;                               
       }         
    }
    


  • 相关阅读:
    MAC配置DNS服务器
    真机IOS8.3以上的文件夹共享
    appium + python的环境配置_windows
    python 的时间与日期
    sublimetext 2 编译文件带input时 提示 EOFError: EOF when reading a line
    cmd无法输入中文解决方案
    配置python学习环境遇到的问题:[Decode error
    monkey初接触
    Android logcat输出中文乱码
    运行 命令框不记录打过的命令,重启后CMD里面是空的.上次打过的命令消失了.
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3828421.html
Copyright © 2011-2022 走看看