zoukankan      html  css  js  c++  java
  • 广度优先搜索 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 }
  • 相关阅读:
    Linux下SVN(Subversion)自动启动脚本
    Linux安装SVN
    【转】utf-8的中文是一个汉字占三个字节长度
    24-《分布式系统架构的本质》系列04——分布式系统关键技术:全栈监控
    23-《分布式系统架构的本质》系列03——分布式系统的技术栈
    22-《分布式系统架构的本质》系列02——从亚马逊的实践,谈分布式系统的难点
    由 leetcode 136. Single Number 引出的异或总结
    【工具软件】-Beyond Compare4 试用到期
    01-更新软件源
    01-程序员也要会项目管理
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5575428.html
Copyright © 2011-2022 走看看