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 }
View Code

相关文章: