uva,572
简单dfs题目。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 6 using namespace std; 7 const int maxn=105; 8 9 char map[maxn][maxn]; 10 int vis[maxn][maxn]; 11 int n,m; 12 int dx[]={-1,0,-1,-1,0,1,1,1},dy[]={-1,-1,0,1,1,-1,0,1}; 13 14 bool check(int x,int y) 15 { 16 if(x<0 || x>=m || y<0 || y>=n) return false; 17 if(vis[x][y]) return false; 18 if(map[x][y]!='@') return false; 19 return true; 20 } 21 22 void dfs(int x,int y) 23 { 24 int xx,yy; 25 vis[x][y]=1; 26 map[x][y]='#'; 27 for(int i=0;i<8;i++) 28 { 29 xx=x+dx[i]; 30 yy=y+dy[i]; 31 if(check(xx,yy)) 32 { 33 dfs(xx,yy); 34 } 35 } 36 37 } 38 39 40 int main() 41 { 42 while(scanf("%d %d",&m,&n) && n+m) 43 { 44 memset(map,0,sizeof(map)); 45 for(int i=0;i<m;i++) 46 scanf("%s",map[i]); 47 48 memset(vis,0,sizeof(vis)); 49 int cnt=0; 50 for(int i=0;i<m;i++) 51 for(int j=0;j<n;j++) 52 { 53 if(!vis[i][j] && map[i][j]=='@') 54 { 55 dfs(i,j); 56 cnt++; 57 } 58 } 59 printf("%d\n",cnt); 60 } 61 return 0; 62 }