POJ 2386
1 #include<iostream> 2 #include<stdio.h> 3 #define MAXN 105 4 using namespace std; 5 6 char _m[MAXN][MAXN]; 7 bool mark[MAXN][MAXN]; 8 int r; 9 int c; 10 void is_connect(int i,int j); 11 int main() 12 { 13 //freopen("acm.acm","r",stdin); 14 int i; 15 int j; 16 int num = 0; 17 cin>>r>>c; 18 for(i = 0; i < r; ++ i) 19 { 20 for(j = 0; j < c; ++ j) 21 { 22 cin>>_m[i][j]; 23 } 24 } 25 26 //for(i = 0; i < r; ++ i) 27 //{ 28 // for(j = 0; j < c; ++ j) 29 // cout<<_m[i][j]; 30 // cout<<endl; 31 //} 32 33 for(i = 0; i < MAXN; ++ i) 34 { 35 for(j = 0; j < MAXN; ++ j) 36 { 37 38 if(_m[i][j] == 'W' && !mark[i][j]) 39 { 40 ++ num; 41 mark[i][j] = true; 42 is_connect(i,j); 43 } 44 } 45 } 46 cout<<num<<endl; 47 48 } 49 50 void is_connect(int i,int j) 51 { 52 if(i > 0 && !mark[i-1][j] && _m[i-1][j] == 'W') 53 { 54 mark[i-1][j] = true; 55 is_connect(i-1,j); 56 } 57 if(i < r-1 && !mark[i+1][j] && _m[i+1][j] == 'W') 58 { 59 mark[i+1][j] = true; 60 is_connect(i+1,j); 61 } 62 if(j > 0 && !mark[i][j-1] && _m[i][j-1] == 'W') 63 { 64 mark[i][j-1] = true; 65 is_connect(i,j-1); 66 } 67 if(j < c-1 && !mark[i][j+1] && _m[i][j+1] == 'W') 68 { 69 mark[i][j+1] = true; 70 is_connect(i,j+1); 71 } 72 if(i > 0 && j > 0 && !mark[i-1][j-1] && _m[i-1][j-1] == 'W') 73 { 74 mark[i-1][j-1] = true; 75 is_connect(i-1,j-1); 76 } 77 if(i > 0 && j < c-1 && !mark[i-1][j+1] && _m[i-1][j+1] == 'W') 78 { 79 mark[i-1][j+1] = true; 80 is_connect(i-1,j+1); 81 } 82 if(i < r-1 && j > 0 && !mark[i+1][j-1] && _m[i+1][j-1] == 'W') 83 { 84 mark[i+1][j-1] = true; 85 is_connect(i+1,j-1); 86 } 87 if(i < r-1 && j < c-1 && !mark[i+1][j+1] && _m[i+1][j+1] == 'W') 88 { 89 mark[i+1][j+1] = true; 90 is_connect(i+1,j+1); 91 } 92 }