6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
45 59 6 13
搜索题;
好像又是种子填充;
难度不高;
#include<iostream> #include<cstdlib> #include<string> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<stack> #include<queue> #include<iomanip> #include<map> #define pi 3.14159265358979323846 using namespace std; struct point { int x,y; }; point start; int W,H; char maze[25][25]; int dx[]={1,-1,0,0}; int dy[]={0,0,1,-1}; int ans; bool flag[25][25]; void dfs(int x,int y) { flag[x][y]=1; point temp; for(int i=0;i<4;++i) { temp.x=x+dx[i]; temp.y=y+dy[i]; if(temp.x>=0&&temp.x<H&&temp.y>=0&&temp.y<W&&flag[temp.x][temp.y]==0&&maze[temp.x][temp.y]=='.') { ++ans; dfs(temp.x,temp.y); } } } int main() { while(scanf("%d %d",&W,&H)!=EOF&&W&&H) { for(int i=0;i<H;++i) for(int j=0;j<W;++j) { scanf(" %c",&maze[i][j]); if(maze[i][j]=='@') { start.x=i; start.y=j; } } ans=1; memset(flag,0,sizeof(flag)); dfs(start.x,start.y); printf("%d\n",ans); } return 0; }