第一道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 }