ECNU2856

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int dx[]={0,0,1,-1,-1,-1,1,1};
 4 const int dy[]={1,-1,0,0,-1,1,-1,1};//走的方向
 5 char map[1005][100];
 6 int dfs(int x,int y)
 7 {
 8     int i,j,k,tp,ddx,ddy;
 9     if(map[x][y]=='.')
10         return 0;//
11     map[x][y]='.';//表示遍历过了
12     tp=1;
13     for(k=0;k<8;k++)
14     {
15         ddx=dx[k]+x;
16         ddy=dy[k]+y;
17         tp=tp+dfs(ddx,ddy);
18     }
19     return tp;
20 }
21 int max(int i,int j)
22 {
23     if(i>j)
24         return i;
25     else
26         return j;
27 }
28 int main()
29 {
30     int i,j,hang,lie,sum,pp;
31     while(scanf("%d%d",&lie,&hang)==2)
32     {
33         getchar();
34         memset(map,'.',sizeof(map));//初始化该地图
35         for(i=1;i<=hang;i++)
36         {
37             for(j=1;j<=lie;j++)
38                 scanf("%c",&map[i][j]);
39             getchar();
40         }
41         sum=0;pp=0;
42         for(i=1;i<=hang;i++)
43             for(j=1;j<=lie;j++)
44             {
45                 if(map[i][j]=='*')
46                 {
47                     sum=dfs(i,j);
48                 if(sum>=1)
49                     pp++;
50                 }
51             }
52         printf("%d\n",pp);
53     }    
54 return 0;
55 }
keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/2472793.html