• 2806 红与黑 个人博客:doubleq.win


    个人博客:doubleq.win

    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

    数据范围及提示 Data Size & Hint

     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int a[101][101];
     6 int x,y;
     7 int xx[9]={-1,+1,0,0};
     8 int yy[9]={0,0,-1,+1};
     9 int tot;
    10 int vis[101][101];
    11 void dfs(int x,int y)
    12 {
    13     for(int i=0;i<4;i++)
    14     {
    15         if(a[x+xx[i]][y+yy[i]]==1&&vis[x+xx[i]][y+yy[i]]==0)
    16         {
    17             vis[x+xx[i]][y+yy[i]]=1;
    18             tot++;
    19             dfs(x+xx[i],y+yy[i]);
    20         }
    21     }
    22 }
    23 int main()
    24 {
    25     int n,m;
    26     while(1)
    27     {    
    28     cin>>m>>n;
    29     if(m==0&&n==0)
    30     break;
    31     tot=0;
    32     memset(vis,0,sizeof(vis));
    33     memset(a,0,sizeof(a));
    34     for(int i=1;i<=n;i++)
    35     {
    36         for(int j=1;j<=m;j++)
    37         {
    38             char p;
    39             cin>>p;
    40             if(p=='@')
    41             {
    42                 x=i;
    43                 y=j;//初始位置 
    44             }    
    45             else if(p=='.')
    46             a[i][j]=1;//黑砖 可以行走
    47             else if(p=='#')
    48             a[i][j]=0;//红砖 不可以行走 
    49             else continue;
    50         }
    51     }
    52     dfs(x,y);
    53     cout<<tot+1<<endl;
    54     }
    55     return 0;
    56 }

    最简单最暴力的搜索

  • 相关阅读:
    [NOI2009]管道取珠 DP + 递推
    poj3207 Ikki's Story IV
    NOIP2016Day1T2天天爱跑步(LCA+桶)
    NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
    NOIP2016Day1T3换教室(floyd+期望dp)
    bzoj1854: [Scoi2010]游戏(匈牙利) / GDKOI Day2 T2(最大流)
    [CodeVs4927]线段树练习5
    基数排序的奇技淫巧
    bzoj2724: [Violet 6]蒲公英(离散化+分块)
    bzoj1483: [HNOI2009]梦幻布丁(链表+启发式合并)
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6596319.html
Copyright © 2020-2023  润新知