Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 21482 | Accepted: 11488 |
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
Source
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int r,c; char a[200][200]; int vis[200][200]; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int sum; void dfs(int i,int j) { //if(a[i][j]=='#'||(vis[i][j])||(i<0||j<0||(i>r-1||j>c-1))) //return; //else //{ a[i][j]='#'; sum++; for(int k = 0;k < 4;k++) { int x = i+dir[k][0]; int y = j+dir[k][1]; if(a[x][y]=='.'&&!vis[x][y]&&x>=0&&y>=0&&x<=r-1&&y<=c-1) { dfs(x,y); vis[x][y]=1; } } //} } int main() { int i,j,x,y; while(scanf("%d%d",&c,&r),r||c) { sum=0; memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); for(i=0;i<r;i++) { getchar(); for(j=0;j<c;j++) { a[i][j] = getchar(); if(a[i][j]=='@') { x=i; y=j; } } } //count=0; dfs(x,y); cout<<sum<<endl; } }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119108.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...