zoukankan      html  css  js  c++  java
  • Red and Black

    其实这样的题目一直没怎么想通是怎么回事儿,因为先前知道的宽搜和这个有点混乱。经常做题是好的,本来就天资平平,不努力怎么行。

    问题描述:

    有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

    输入:

    包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下

    1)‘.’:黑色的瓷砖;

    2)‘#’:白色的瓷砖;

    3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。

    当在一行中读入的是两个零时,表示输入结束。

    输出:

    对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

    样例输入:

    6 9

    ....#.

    .....#

    ......

    ......

    ......

    ......

    ......

    #@...#

    .#..#.

    0 0

    样例输出:

    45

    代码:

    #include<stdio.h>
    int w,h;
    char array[21][21];
    int digui(int x,int y)
    {
        if(x<0||y<0||x>=w||y>=h)
          return 0;
        if(array[x][y]=='#')
          return 0;
        else{
            array[x][y]='#';
            return 1+digui(x-1,y)+digui(x+1,y)+digui(x,y-1)+digui(x,y+1);
        }
    }
          
    int main()
    {
        int i,j;
        while(scanf("%d%d",&h,&w)&&w!=0&&h!=0){
            for(i=0;i<w;i++)
              scanf("%s",array[i]);
            for(i=0;i<w;i++)
              for(j=0;j<h;j++){
                    if(array[i][j]=='@')
                      printf("%d\n",digui(i,j));
                    }
                }
            }

  • 相关阅读:
    人心散了、项目必然要败(转自CSDN)
    sql server加锁机制
    数据库事物隔离级别
    aop学习
    数据库加锁(转)
    托管代码和非托管代码效率的对比。
    day05 Linux文本处理命令
    day04 CentOS 异常,问题解决方法
    day02 Linux系统介绍与安装
    linux常用命令的英文单词缩写
  • 原文地址:https://www.cnblogs.com/laobanban/p/2945047.html
Copyright © 2011-2022 走看看