• HDU 1312:Red and Black


    Red and Black

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


    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

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    
    using namespace std;
    
    char color[25][25];
    int ans;
    int w, h;
    int x, y;
    int dx[]= {1, -1, 0, 0};
    int dy[]= {0, 0, 1, -1};
    
    void dfs(int x, int y, int w, int h)
    {
        ans++;
        color[x][y]='#';
        for(int i=0; i<4; i++)
        {
            x=x+dx[i];
            y=y+dy[i];
            if(x>=0 && x<h && y>=0 && y<w && color[x][y]=='.')
                dfs(x, y, w, h);
            x-=dx[i];    //要特别注意还原数据
            y-=dy[i];
        }
    }
    
    int main()
    {
        while(scanf("%d%d", &w, &h)!=EOF)
        {
            if(w==0 && h==0)
                break;
            ans=0;
            memset(color, 0, sizeof(color));
            for(int i=0; i<h; i++)
            {
                scanf("%s", color[i]);
                for(int j=0; j<w; j++)
                {
                    if(color[i][j]=='@')
                    {
                        x=i;
                        y=j;
                        break;
                    }
                }
            }
            dfs(x, y, w, h);
            cout<<ans<<endl;
        }
    
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    校园商铺-2项目设计和框架搭建-8升级mysql驱动相关的配置以支持mysql8
    校园商铺-2项目设计和框架搭建-7验证Dao
    校园商铺-2项目设计和框架搭建-6逐层完成SSM的各项配置
    校园商铺-2项目设计和框架搭建-5配置maven
    校园商铺-2项目设计和框架搭建-2实体类设计与表创建
    1移动测试流程和技术体系
    校园商铺-2项目设计和框架搭建-1系统功能模块划分
    校园商铺-1开发准备-3 Eclipse与maven的联合配置
    校园商铺-1开发准备-2开发准备
    校园商铺-1开发准备-1课程序章
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4849292.html
Copyright © 2020-2023  润新知