• 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 }
  • 相关阅读:
    Redis cluster学习 & Redis常识 & sort操作
    【Todo】【转载】JVM学习
    【Todo】【转载】Java中的锁机制2
    【转载】git命令和svn的对比
    【Todo】抽象渗漏法则 & 找到理想员工 & 软件开发成功 12 法则 & Joel on Software
    【转载】Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference
    JS里面匿名函数的调用 & 变量作用域的实验
    【Todo】深入理解Java虚拟机 读书笔记
    poj 2503 Babelfish
    hdu4493 Tutor
  • 原文地址:https://www.cnblogs.com/GO-NO-1/p/3470258.html
Copyright © 2020-2023  润新知