• 广度优先搜索 codevs 2806 红与黑


    codevs 2806 红与黑

     时间限制: 1 s
     空间限制: 64000 KB
     题目等级 : 白银 Silver
     
    题目描述 Description

    有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数。

    输入描述 Input Description

    输入包含多个数据集。一个数据集开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.
    每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示:
    '.'——黑砖
    '#'——红砖
    '@'——男子(每个数据集仅出现一次)
    两个0表示输入结束。

    输出描述 Output Description

    对每个数据集,程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数。

    样例输入 Sample Input

    6 9
    ....#.
    .....#
    ......
    ......
    ......
    ......
    ......
    #@...#
    .#..#.
    11 9
    .#.........
    .#.#######.
    .#.#.....#.
    .#.#.###.#.
    .#.#..@#.#.
    .#.#####.#.
    .#.......#.
    .#########.
    ...........
    11 6
    ..#..#..#..
    ..#..#..#..
    ..#..#..###
    ..#..#..#@.
    ..#..#..#..
    ..#..#..#..
    7 7
    ..#.#..
    ..#.#..
    ###.###
    ...@...
    ###.###
    ..#.#..
    ..#.#..
    0 0

    样例输出 Sample Output

    45
    59
    6
    13

     1 /*比较简单的广搜题目*/
     2 #include<iostream>
     3 using namespace std;
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<queue>
     7 int w,h;
     8 int jz[25][25]={0};
     9 struct poi{
    10     int x,y;
    11 };
    12 int xq,yq;
    13 int xx[]={1,-1,0,0};
    14 int yy[]={0,0,1,-1};
    15 void input()
    16 {
    17     char s[25];
    18     for(int i=1;i<=h;++i)
    19     {
    20         scanf("%s",s+1);
    21         for(int j=1;j<=w;++j)
    22         {
    23             if(s[j]=='#')
    24               jz[i][j]=1;
    25             if(s[j]=='@')
    26             {
    27                 xq=i;yq=j;
    28             }
    29         }
    30     }
    31 }
    32 int bfs()
    33 {
    34     int ans=0;
    35     poi p;
    36     p.x=xq;p.y=yq;
    37     queue<poi>que;
    38     que.push(p);
    39     while(!que.empty())
    40     {
    41         poi k=que.front();
    42         que.pop();
    43         int x=k.x,y=k.y;
    44         jz[x][y]=2;
    45         for(int i=0;i<4;++i)
    46         {
    47             int x1=x+xx[i],y1=y+yy[i];
    48             if(x1>=1&x1<=h&y1>=1&&y1<=w&&jz[x1][y1]==0)
    49             {
    50                 que.push(poi{x1,y1});
    51             }
    52         }
    53     }
    54     for(int i=1;i<=h;++i)
    55       for(int j=1;j<=w;++j)
    56       if(jz[i][j]==2) ans++;
    57     return ans;
    58 }
    59 int main()
    60 {
    61     while(scanf("%d%d",&w,&h)==2)
    62     {
    63         if(w==0&&h==0) break;
    64         memset(jz,0,sizeof(jz));
    65         input();
    66         printf("%d
    ",bfs());
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    优质Android小部件:索尼滚动相册
    Linux常用命令:文件与目录
    Android高效计算——RenderScript(二)
    Android高效计算——RenderScript(一)
    实用控件分享:自定义逼真相机光圈View
    Binder中的asInterface解析
    Android Adapter的几个方法
    Android中各种Drawable总结
    win10配置CUDA+Tensorflow2.0的一些经验
    关于Flash Helper Service的问题
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5575428.html
Copyright © 2020-2023  润新知