• Red and Black


    Red and Black

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 118 Accepted Submission(s): 92
     
    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
    Asia 2004, Ehime (Japan), Japan Domestic
     
    Recommend
    Eddy
    #include<bits/stdc++.h>
    #define N 25
    using namespace std;
    int vis[N][N];
    char mapn[N][N];
    int dir[4][2]={
        {1,0},
        {-1,0},
        {0,1},
        {0,-1},
    };
    int cur=0;
    int n,m;
    bool ok(int x,int y)
    {
        if(x<0||x>=m||y<0||y>=n||vis[x][y]||mapn[x][y]=='#')
            return false;
        return true;
    }
    void dfs(int x,int y)
    {
        cur++;
        for(int i=0;i<4;i++)
        {
            int fx=x+dir[i][0];
            int fy=y+dir[i][1];
            if(ok(fx,fy))
            {
                vis[fx][fy]=1;
                dfs(fx,fy);
            }
        }
    }
    int main()
    {
        //freopen("C:\Users\acer\Desktop\in.txt","r",stdin);
        while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
        {
            memset(vis,0,sizeof vis);
            int x,y;
            getchar();
            for(int i=0;i<m;i++)
            {
                scanf("%s",mapn[i]);
                //cout<<mapn[i]<<endl;
                for(int j=0;j<n;j++)
                {
                    if(mapn[i][j]=='@')
                    {
                        x=i;
                        y=j;
                    }
                    //cout<<mapn[i][j];
                }
                //cout<<endl;
            }
            cur=0;
            vis[x][y]=1;
            dfs(x,y);
            printf("%d
    ",cur);
        }
        return 0;
    }
  • 相关阅读:
    标志寄存器和跳转指令
    js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版【转】
    关于mysql的级联删除(之前好多人咨询过我)
    用DIV画个漂亮的Table,根本看不出是div画的
    最简单的Ajax局部提交整体form,无刷新页面
    themeleaf中使用javascript时,字符“&&”的转义问题。
    Mysql 进行sequence的新建,同时建立计划每日重置。
    动态给H5页面绑定数据,基本万能无错误!
    手风琴效果简单实现,修改bootstrap内部事件接口并且自由定义。
    JQuery实现追加表格,不使用拼接html方式
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6041178.html
Copyright © 2020-2023  润新知