标签:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 25014 | Accepted: 13502 |
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #define N 1009 using namespace std; char s[N][N]; int n,m; int sx,sy; int dis[4][2]={ {0,1},{0,-1},{1,0},{-1,0} }; int sum; void dfs(int x,int y) { for(int i=0;i<4;i++) { int xx=x+dis[i][0]; int yy=y+dis[i][1]; if(xx>=0 && xx<n && yy>=0 && yy<m && s[xx][yy]=='.') { s[xx][yy]='#'; sum++; dfs(xx,yy); } } } int main() { while(scanf("%d %d",&m,&n)!=EOF) { if(n+m<=0) break; sum=1;//起点一定算一个答案,如果只有一个点的话,那么答案将输出0 for(int i=0;i<n;i++) { scanf("%s",s[i]); for(int j=0;j<m;j++) { if(s[i][j]=='@')//起点已经算了一个,直接修改成# { sx=i; sy=j; s[i][j]='#'; break; } } } dfs(sx,sy); printf("%d\n",sum); } return 0; }
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/45786815