zoukankan      html  css  js  c++  java
  • HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)

    题目代号:HDU 1312

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312

    Red and Black

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


    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

    题目大意:一个男子站在‘.’上,他不能走到‘#’上问他能走到的‘.’的数量是多少。

    解题思路:初始点bfs四个方向都遍历一次即可。

    差点被自己气哭,第一次提交的时候忘记初始化数组,因为没有判断边界,直接导致WA。

    AC代码:

    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>
    # include <iostream>
    # include <fstream>
    # include <vector>
    # include <queue>
    # include <stack>
    # include <map>
    # include <math.h>
    # include <algorithm>
    using namespace std;
    # define pi acos(-1.0)
    # define mem(a,b) memset(a,b,sizeof(a))
    # define FOR(i,a,n) for(int i=a; i<=n; ++i)
    # define For(i,n,a) for(int i=n; i>=a; --i)
    # define FO(i,a,n) for(int i=a; i<n; ++i)
    # define Fo(i,n,a) for(int i=n; i>a ;--i)
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int MAXM=25;
    char a[MAXM][MAXM];
    int n,m,ans;
    int cx[]={-1,1,0,0};
    int cy[]={0,0,-1,1};
    
    struct node
    {
        int x,y;
    };
    
    queue<node>Q;
    
    void bfs()
    {
        while(!Q.empty())
        {
            int x=Q.front().x;
            int y=Q.front().y;
            Q.pop();
            for(int i=0;i<4;i++)
            {
                int tx=x+cx[i];
                int ty=y+cy[i];
                if(a[tx][ty]=='.')
                {
                    ans++;
                    a[tx][ty]='#';
                    Q.push(node{tx,ty});
                }
            }
        }
    }
    
    int main()
    {
        //freopen("in.txt", "r", stdin);
        while(cin>>m>>n,n&&m)
        {
            mem(a,0);
            for(int i=1;i<=n;i++)
            {
                cin>>a[i]+1;
                for(int j=1;j<=m;j++)
                {
                    if(a[i][j]=='@')
                    {
                        Q.push(node{i,j});
                        a[i][j]='#';
                    }
                }
            }
            ans=1;
            bfs();
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    网络配置
    yum源配置
    linux压缩命令
    linux下创建和删除软、硬链接
    linux挂载光盘
    Linux-chmod_命令的详细用法讲解
    linux_rpm命令
    Linux_Vi_命令
    anglarJs前端控制器的继承
    angularJs分层服务开发
  • 原文地址:https://www.cnblogs.com/teble/p/7243684.html
Copyright © 2011-2022 走看看