第一道DFS 大家撒花纪念下~HDU 1241 Oil Deposits

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1241

题目大意是@是可以走的,让你找出是不是有几块是连载一起的。跟挑战编程上的一道题木很想、

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 char map[110][110];
 5 int vis[110][110];
 6 int to[8][2] = {{0,1},{0,-1},{1,0},{1,1},{1,-1},{-1,0},{-1,1},{-1,-1}};
 7 int n,m,count;
 8 
 9 void dfs(int x,int y)
10 {
11     int i;
12     for(i = 0;i < 8;i++)
13     {
14         if(map[x+to[i][0]][y+to[i][1]] == '@' && !vis[x+to[i][0]][y+to[i][1]])
15         {
16             if(x+to[i][0] >= 0&&x+to[i][0] < n && y+to[i][1]>=0 && y+to[i][1] < m)
17             {
18                 vis[x+to[i][0]][y+to[i][1]] = 1;
19                 dfs(x+to[i][0],y+to[i][1]);
20             }
21         }
22     }
23 }
24 int main()
25 {
26     int i,j,k;
27     while(scanf("%d %d",&n,&m)&&n||m)
28     {
29         count = 0;
30         memset(map,0,sizeof(map));
31         memset(vis,0,sizeof(vis));
32         for(i = 0;i < n;i++)
33         scanf("%s",map[i]);
34 
35 
36         for(i = 0;i < n;i++)
37         {
38             for(j = 0;j < m;j++)
39             {
40                 if(map[i][j] == '@'&&!vis[i][j])
41                 {
42                     vis[i][j] = 1;
43                     count++;
44                     dfs(i,j);
45                 }
46             }
47         }
48         printf("%d\n",count);
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/0803yijia/p/2618991.html