1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <stdlib.h> #include <string.h> int m,n; int pack; int find[110][110]; char map[110][110]; int iPlus[8] = {-1,-1,0,-1,0,1,1,1}; int jPlus[8] = {-1,1,-1,0,1,0,-1,1}; void (int i,int j) { int k; int near_i,near_j; find[i][j] = 1; for ( k = 0; k < 8; k++) { near_i = i + iPlus[k]; near_j = j + jPlus[k]; if ( near_i >= 0 && near_i < m && near_j >=0 && near_j < n ) { if(find[near_i][near_j]==0 && map[near_i][near_j]=='@') DFS(near_i,near_j); } } } int main() { freopen("Sample Input.txt","r",stdin); system("Color F0"); int i,j,k; while ( scanf("%d%d",&m,&n), m&&n) { for ( i = 0; i < m; i++) { getchar(); scanf("%s",map[i]); } pack = 0; memset(find,0,sizeof(find)); for ( i = 0; i < m; i++) { for ( j = 0; j < n; j++) { if ( map[i][j]=='@' && find[i][j]==0) { pack++; DFS(i,j); } } } printf("%dn",pack); } getch(); return 0; }
|
近期评论