传送门:
poj:http://poj.org/problem?id=1979
zoj:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1165
题目大意:
给你初始坐标,标记为‘#‘的格子不能走,求你能走的所有格子的个数(能走的为‘.’,初始坐标用‘@’表示)
思路:
一看直接DFS就好了嘛。。。。
好几天没刷题了,回到家来水一发先~
#include<cstdio> #include<cstring> const int MAXN=21+2; char map[MAXN][MAXN]; bool vis[MAXN][MAXN]; int ans; int m,n; void dfs(int x,int y) { if(vis[x][y]==true||map[x][y]==‘#‘) return; vis[x][y]=true; ans++; if(x!=0) dfs(x-1,y); if(y!=0) dfs(x,y-1); if(x!=n-1) dfs(x+1,y); if(y!=m-1) dfs(x,y+1); } int main() { while(~scanf("%d%d",&m,&n),n||m) { memset(vis,0,sizeof(vis)); ans=0; for(int i=0;i<n;i++) scanf("%s",map[i]); int begin_x,begin_y; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(map[i][j]==‘@‘) { begin_x=i; begin_y=j; } dfs(begin_x,begin_y); printf("%d\n",ans); } return 0; }