标签:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 29614 | Accepted: 16095 |
Description
Input
Output
Sample Input
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
Sample Output
45 59 6 13
题意是从@点出发,然后遍历整个图,‘.’表示可以到达的地方,求最多可以走多少个‘.’,初始的点也算一个,注意sum=1初始化
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; char map[25][25]; int vis[25][25]; int n,m,num; int dr[4]={0,1,-1,0}; int dc[4]={-1,0,0,1}; void dfs(int x,int y){ int i; for(i=0;i<4;i++){ int dx=x+dr[i]; int dy=y+dc[i]; if(dx>=0&&dx<n&&dy>=0&&dy<m&&!vis[dx][dy]&&map[dx][dy]=='.'){ vis[dx][dy]=1; num++; dfs(dx,dy); } } } int main(){ int i,j,x,y; //freopen("test.txt","r",stdin); while(~scanf("%d %d",&m,&n)){ if(m==0&&n==0) break; char c[25]; for(i=0;i<n;i++){ scanf("%s",&c); for(j=0;j<m;j++){ map[i][j]=c[j]; if(map[i][j]=='@'){ x=i;y=j; } } } //printf("%d %d\n",x,y); memset(vis,0,sizeof(vis)); num=1; dfs(x,y); printf("%d\n",num); } return 0; }
标签:
原文地址:http://blog.csdn.net/qq_27717967/article/details/51365344