1249:Lake Counting
http://ybt.ssoier.cn:8088/problem_show.php?pid=1249&teacher=2
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n, m; 4 char mp[120][120]; 5 int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}}; 6 int ans; 7 8 void dfs(int x, int y){ 9 for(int i=0; i<8; i++){ 10 int nx=x+dir[i][0], ny=y+dir[i][1]; 11 if(mp[nx][ny]=='W'){ 12 mp[nx][ny]='.'; 13 dfs(nx, ny); 14 } 15 } 16 } 17 18 struct node{ 19 int x, y; 20 }; 21 node que[14400]; 22 int f, r; 23 void bfs(int x, int y){ 24 f=r=1; 25 que[r].x=x; que[r].y=y; mp[x][y]='.'; 26 while(f<=r){ 27 int fx=que[f].x, fy=que[f].y; 28 for(int i=0; i<8; i++){ 29 int nx=fx+dir[i][0], ny=fy+dir[i][1]; 30 if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny]=='W'){ 31 mp[nx][ny]='.'; 32 r++; 33 que[r].x=nx; que[r].y=ny; 34 } 35 } 36 f++; 37 } 38 } 39 int main() 40 { 41 cin>>n>>m; 42 for(int i=0; i<n; i++)cin>>mp[i]; 43 for(int i=0; i<n; i++) 44 for(int j=0; j<m; j++){ 45 if(mp[i][j]=='W'){ 46 ans++; 47 //dfs(i, j); 48 bfs(i, j); 49 } 50 } 51 cout<<ans; 52 return 0; 53 }
第47行、48行比好DFS和BFS的用法