zoukankan      html  css  js  c++  java
  • codevs 2806 红与黑

    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

    年代久远,解题思路懒得回想,

    应该是一个简单的dfs

     1 #include<cmath>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cstdio>  
     6 #include<algorithm>
     7 using namespace std;
     8 int w,h,sx,sy,ans=0,s=0;
     9 int map[21][21],step[100];
    10 int bx[5]={0,0,0,1,-1};
    11 int by[5]={0,1,-1,0,0};
    12 void dfs(int x,int y)
    13 {
    14     ans++;
    15     map[x][y]=1;
    16     for(int i=1;i<=4;i++)
    17     {
    18         int xx=x+bx[i],yy=y+by[i];
    19         if(xx>=1&&xx<=h&&yy>=1&&yy<=w&&map[xx][yy]==0)
    20         {
    21             dfs(xx,yy);
    22         }
    23     }
    24 }
    25 int main()
    26 {
    27     while((cin>>w>>h)&&(w+h!=0))
    28     {
    29         for(int i=1;i<=h;i++)
    30         {
    31             for(int j=1;j<=w;j++)
    32             {
    33                 char c;
    34                 cin>>c;
    35                 if(c=='.') map[i][j]=0;
    36                 if(c=='#') map[i][j]=1;
    37                 if(c=='@') {sx=i; sy=j;}
    38             }
    39         }
    40         dfs(sx,sy);
    41         step[s]=ans;
    42         ans=0;
    43         s++;
    44     }
    45     for(int i=0;i<=s-1;i++)
    46     {
    47         cout<<step[i]<<"
    ";
    48     }
    49     return 0;
    50     
    51 }
  • 相关阅读:
    3-百度网盘视频在线倍速播放
    16-算法训练 数字三角形
    【2018ACM/ICPC网络赛】徐州赛区
    【python】collections的使用
    【python】遇到的错误
    【2018ACM/ICPC网络赛】沈阳赛区
    【csp】2018-3
    【python】快速排序
    【csp】2017-12
    【校OJ】选网线
  • 原文地址:https://www.cnblogs.com/sssy/p/6809900.html
Copyright © 2011-2022 走看看