zoukankan      html  css  js  c++  java
  • hdu 1312 Red and Black (dfs)

    Red and Black

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 7328    Accepted Submission(s): 4585


    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
     
    Recommend
    Eddy   |   We have carefully selected several similar problems for you:  1072 1175 1258 1026 1728 
     
     1 //0MS    256K    748 B    C++
     2 /*
     3 
     4     题意:
     5         求与'@'连在一起的'.' 的数量
     6     
     7     DFS:
     8         基础dfs.. 
     9 
    10 */ 
    11 #include<stdio.h>
    12 #include<string.h>
    13 char g[25][25];
    14 int mov[4][2]={0,1,1,0,0,-1,-1,0};
    15 int n,m,s,e;
    16 int cnt;
    17 void dfs(int x,int y)
    18 {
    19     for(int i=0;i<4;i++){
    20         int tx=x+mov[i][0];
    21         int ty=y+mov[i][1];
    22         if(tx>=0 && tx<n && ty>=0 && ty<m && g[tx][ty]=='.'){
    23             cnt++;
    24             g[tx][ty]='#';
    25             dfs(tx,ty);
    26         }
    27     }
    28 }
    29 int main(void)
    30 {
    31     while(scanf("%d%d",&m,&n),n+m)
    32     {
    33         for(int i=0;i<n;i++){
    34             scanf("%s",g[i]);
    35             for(int j=0;j<m;j++)
    36                 if(g[i][j]=='@'){
    37                     s=i,e=j;
    38                 }
    39         }
    40         cnt=1;
    41         g[s][e]='#';
    42         dfs(s,e);
    43         printf("%d
    ",cnt);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    java常用类-----String类的源码分析、可变和不可变序列
    java常用类-----包装类及自动装箱和拆箱
    java数组---------二分查找_折半检索
    java数组------冒泡排序和优化
    java数组--------多维数组及数组存储表格数据
    java数组------Arrays工具类使用
    Volley超时重试机制
    Volley框架原理
    模块化实现(好处,原因)
    Android系统显示原理
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/3470258.html
Copyright © 2011-2022 走看看