• 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));
                    }
                }
            }

  • 相关阅读:
    ubuntu 下 apt-get update 错误
    'unable to run mksdcard sdk tool" when instll android studio on ubuntu14.10以后版本
    ubuntu下安装sougou
    ubuntu下安装jdk1.8.0_91
    ubuntu update时出现错误
    android studio中R文件变红并报错
    git使用
    Android新手须知
    css初级之框模型
    css初级之边框
  • 原文地址:https://www.cnblogs.com/laobanban/p/2945047.html
Copyright © 2020-2023  润新知