zoukankan      html  css  js  c++  java
  • Red and Black ---路线问题

    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
     
     
     
     
    #include <stdio.h>
    #define N 22
    char ch[N][N];
    int m ,n;
    int fin(int x, int y)
    {
        if(x<0 || x>=n || y<0 || y>=m)
            return 0;
        else if(ch[x][y]=='#')
            return 0;
        else
        {
            ch[x][y] = '#';
            return 1+fin(x-1, y)+fin(x+1, y)+fin(x, y-1)+fin(x, y+1);
        }
    
    }
    int main()
    {
        int i, j;
        int x, y, a;
        while (scanf("%d%d", &m, &n), m!=0 && n!=0)
        {
            for(i = 0; i<n; i++)
            {
                for (j =0; j<m; j++)
                {
                    scanf(" %c", &ch[i][j]);
                    if (ch[i][j]=='@')
                    {
                        x = i;
                        y = j;
    
                    }
                }
            }
            a = fin(x, y);
            printf("%d
    ", a);
        }
    
        return 0;
    }
  • 相关阅读:
    简单的运动框架——分享给初学者
    Python数据分析学习日志(1. 书单)
    mysql恢复数据参考
    window cmd 杀掉 java.exe 进程
    转载: Ajax关于readyState和status的讨论
    开发问题bug记录
    vue基础part10
    vue基础part9
    vue基础part(7-8)
    vue基础part(4-6)
  • 原文地址:https://www.cnblogs.com/yishilin/p/4235659.html
Copyright © 2011-2022 走看看