poj 1979
简单的图上的dfs,不解释
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=20+5; char mapp[maxn][maxn]; int d[maxn][maxn]; bool vis[maxn][maxn]; int m,n,p,q; int ans; int dd[5][3]={{1,0},{-1,0},{0,1},{0,-1}}; void dfs(int x,int y) { for(int i=0;i<4;i++) { int dx=x+dd[i][0]; int dy=y+dd[i][1]; if(!vis[dx][dy]&&dx>=0&&dx<m&&dy>=0&&dy<n&&mapp[dx][dy]!='#') { //printf("%d %d\n",dx,dy); vis[dx][dy]=true; mapp[dx][dy]='.'; ans++; dfs(dx,dy); } } } int main() { while(cin >> n >> m) { if(!m||!n) break; memset(vis,0,sizeof(vis)); ans=0; for(int i=0; i<m; i++) for(int j=0;j<n;j++) cin >> mapp[i][j]; for(int i=0; i<m; i++) for(int j=0; j<n; j++) if(mapp[i][j]=='@') { p=i,q=j; break; } vis[p][q]=true; dfs(p,q); printf("%d\n",ans+1); } return 0; }