zoukankan      html  css  js  c++  java
  • Red and Black(poj 1979 bfs)

    Red and Black
    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 27891   Accepted: 15142

    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

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstring>
     5 #include <queue>
     6 using namespace std;
     7 char map[25][25];
     8 bool vis[25][25];
     9 int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    10 int w,h;
    11 int sx,sy;
    12 struct node
    13 {
    14     int x,y;
    15 };
    16 int bfs()
    17 {
    18     queue<node> q;
    19     int ans=0;
    20     memset(vis,0,sizeof(vis));
    21     node s,temp;
    22     s.x=sx,s.y=sy;
    23     q.push(s);
    24     while(!q.empty())
    25     {    
    26         s=q.front();
    27         q.pop();
    28         ans++;
    29         for(int i=0;i<4;i++)
    30         {
    31             temp.x=s.x+dx[i];
    32             temp.y=s.y+dy[i];
    33             if(temp.x>=0&&temp.x<h&&temp.y>=0&&temp.y<w&&vis[temp.x][temp.y]==0&&map[temp.x][temp.y]=='.')
    34             {
    35                 
    36                 vis[temp.x][temp.y]=1;    
    37                 q.push(temp);
    38 
    39             }
    40         }
    41     }
    42     return ans;
    43 }
    44 int main()
    45 {
    46     int i,j;
    47     freopen("in.txt","r",stdin);
    48     while(scanf("%d%d",&w,&h))
    49     {
    50         if(w==0&&h==0)
    51             break;
    52         for(i=0;i<h;i++)
    53             scanf("%s",map[i]);
    54         for(i=0;i<h;i++)
    55             for(j=0;j<w;j++)
    56                 if(map[i][j]=='@')
    57                 {
    58                     sx=i,sy=j;
    59                     break;
    60                 }
    61 
    62         cout<<bfs()<<endl;
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    Java基础:基本类型
    完全干净的卸载VS2013
    git本地仓库首次push到远程仓库出现错误 ! [rejected] master -> master (fetch first)
    运行VS出现warning C4996错误的解决办法
    xbmc-android的编译
    linux执行sh,出现/bin/sh^M: bad interpreter: No such file or directory
    Ubuntu配置android-vlc编译环境(2015-11-05)
    a80修改默认4k输出,官方代码锁死了
    ubuntu12.04平台下a80编译环境搭建
    编译java代码出现 错误: 需要class, interface或enum 提示
  • 原文地址:https://www.cnblogs.com/a1225234/p/5136828.html
Copyright © 2011-2022 走看看