| 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