• 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 }
  • 相关阅读:
    tcp连接建立和断开
    端口状态说明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT
    window IIS6/IIS7取消脚本执行权限,禁止运行脚本木马
    java 各种架构图汇总
    .NET平台常见技术框架整理汇总
    SQL Server中的Merge Into
    iText从LGPL改成AGPL历史来龙去脉
    工具系列 | 分布式日志管理graylog 实战
    目前博客使用的主题模板
    RLChina 文章
  • 原文地址:https://www.cnblogs.com/a1225234/p/5136828.html
Copyright © 2020-2023  润新知