zoukankan      html  css  js  c++  java
  • A

    Description

    There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles.

    Write a program to count the number of black tiles which he can reach by repeating the moves described above.

    Input

    The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.

    There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.

    '.' - a black tile
    '#' - a red tile
    '@' - a man on a black tile(appears exactly once in a data set)
    The end of the input is indicated by a line consisting of two zeros.

    Output

    For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

    Sample Input

    6 9
    ....#.
    .....#
    ......
    ......
    ......
    ......
    ......
    #@...#
    .#..#.
    11 9
    .#.........
    .#.#######.
    .#.#.....#.
    .#.#.###.#.
    .#.#..@#.#.
    .#.#####.#.
    .#.......#.
    .#########.
    ...........
    11 6
    ..#..#..#..
    ..#..#..#..
    ..#..#..###
    ..#..#..#@.
    ..#..#..#..
    ..#..#..#..
    7 7
    ..#.#..
    ..#.#..
    ###.###
    ...@...
    ###.###
    ..#.#..
    ..#.#..
    0 0

    Sample Output

    45
    59
    6
    13
    

    思路:使用递归,对@所在的位置四个方向查找,一直到不满足条件h>=n||l>=m||h<0||l<0||str[h][l]=='#'||boo[h][l]==1为止。。。

    #include <iostream> #include <string> #include<algorithm>    //头文件 using namespace std; bool boo[25][25]; string str[21]; int jishu=0; int m,n,h=0,l=0;//h为行,l为列 void search(int h,int l) {  if(h>=n||l>=m||h<0||l<0||str[h][l]=='#'||boo[h][l]==1)  //此处如果没有||boo[h][l]==1就会死循环,但是却不显示一直进行,而是程序莫名其妙的结束,以后注意!!!!!!!!!!!!!!   return ;  boo[h][l]=1;  jishu++;

        search(h,l-1);  search(h,l+1);  search(h-1,l);  search(h+1,l); } int main() {  int i,j;  cin>>m>>n;//m是一个字符串的长度 n是字符串数目  while(m!=0&&n!=0)  { jishu=0;        h=0,l=0;   for(i=0;i<n;i++)   {    cin>>str[i];    for(j=0;j<m;j++)     if(str[i][j]=='@')     {       h=i;      l=j;     }   }   memset(boo,0,25*25);   search(h,l);   cout<<jishu<<endl;   cin>>m>>n;  }  return 0; }

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432139.html
Copyright © 2011-2022 走看看