Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13Source
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<map> #include<algorithm> #include<set> #define INF 0x3f3f3f3f using namespace std; int n,m; char a[300][300]; int vis[300][300]; int lx,ly; int dx[]= {-1,1,0,0}; int dy[]= {0,0,-1,1}; int num=0; int dp[300][300]; int panduan(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m) return 1; return 0; } int DFS(int x,int y) { if(!panduan(x,y)||a[x][y]=='#') return 0; if(vis[x][y]==0) { vis[x][y]=1; for(int i=0; i<4; i++) { int fx=dx[i]+x; int fy=dy[i]+y; if(panduan(fx,fy)&&vis[fx][fy]==0&&a[fx][fy]=='.') { DFS(fx,fy); num++; } } //vis[x][y]=0; //走过的点就不用再走了 } return 1; } int main() { while(~scanf("%d%d",&m,&n)) { if(!m&&!n) break; int flag=1; memset(vis,0,sizeof(vis)); for(int i=0; i<n; i++) { scanf("%s",a[i]); if(flag) { for(int j=0; j<m; j++) { if(a[i][j]=='@') { flag=0;<span id="transmark"></span> lx=i;ly=j; break; } } } } num=0; DFS(lx,ly); printf("%d\n",num+1); } }