Description
Write a program to count the number of black tiles which he can reach by repeating the moves described above.
Input
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
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; }