• codevs2806 红与黑


    难度等级:白银
    codevs2806 红与黑
    题目描述 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

    根据样例可以得到,@所在的格子也算

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int m,n,s,qx,qy;
    int dx[4]={-1,0,1,0};
    int dy[4]={0,1,0,-1};
    int a[22][22];
    bool v[22][22];
    char c;
    void dfs(int x,int y)
    {
        s++;
        v[x][y]=true;
        for(int i=0;i<4;i++)
         {
             int xx=dx[i]+x,yy=dy[i]+y;
             if(a[xx][yy]&&!v[xx][yy]) dfs(xx,yy);//因为将所有可以走的点标记为1,所以在不超过数组范围的前提下可以不用判断是否超出边界。因此这样做的的前提是数组要开的比最大数据至少大1 
         }
    }
    int main()
    {
        while(cin>>m>>n)
        {
            if(m==0) return 0;
            memset(a,0,sizeof(a));
            memset(v,0,sizeof(v));
            s=0;
            for(int i=1;i<=n;i++)
             for(int j=1;j<=m;j++)
              {
                   cin>>c;
                   if(c=='.') a[i][j]=1;//将可以走的点标记为1 
                   else if(c=='@') qx=i,qy=j;
              }
            dfs(qx,qy);
            cout<<s<<endl;
        }
    }

    开始做时2个错误:

    1、没有设置判重数组,死循环了。

    2、受题目先输入列数再输入行数的干扰

  • 相关阅读:
    JavaEE XML XSL转换(XSLT)
    Java 并发 中断线程
    Java 并发 线程同步
    Java 并发 关键字volatile
    Java 并发 线程的优先级
    Java 并发 线程属性
    Java 并发 线程的生命周期
    Java NIO Channel和Buffer
    Java NIO Channel之FileChannel [ 转载 ]
    VUE CLI3 less 全局变量引用
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6159014.html
Copyright © 2020-2023  润新知