• POJ 1979 Red and Black


    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 41222   Accepted: 22338

    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) 
    The end of the input is indicated by a line consisting of two zeros. 

    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

    思路:水题,bfs即可。
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int map[21][21];
    int w,h,sx,sy,ans;
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
    struct nond{ int x,y; };
    int main(){
        while(scanf("%d%d",&w,&h)&&w!=0&&h!=0){
            swap(w,h);
            for(int i=1;i<=w;i++)
                for(int j=1;j<=h;j++){
                    char x;cin>>x;
                    if(x=='.')    map[i][j]=0;
                    else if(x=='#')    map[i][j]=1;
                    else if(x=='@'){ sx=i;sy=j;map[i][j]=0; }
                }
            queue<nond>que;ans=1;
            nond tmp;tmp.x=sx;tmp.y=sy;
            que.push(tmp);map[sx][sy]=1;
            while(!que.empty()){
                nond now=que.front();
                que.pop();
                for(int i=0;i<4;i++){
                    int cx=dx[i]+now.x;
                    int cy=dy[i]+now.y;
                    if(cx>=1&&cx<=w&&cy>=1&&cy<=h&&!map[cx][cy]){
                        map[cx][cy]=1;
                        nond mid;mid.x=cx;mid.y=cy;
                        que.push(mid);ans++;
                        //cout<<cx<<" "<<cy<<endl;
                    }
                }
            }
            cout<<ans<<endl;
        }
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    JChartFree创建饼形图
    JFreeChart设置点的颜色
    JChartFree使用散点图
    JChartFree常用数据集
    博客园安家了
    在Android中什么是异步执行;
    XmlPullParserException
    构造器的执行顺序
    Sqlite之contentProvider
    使用java获取歌曲的属性
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8970323.html
Copyright © 2020-2023  润新知