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的用法

原文地址:https://www.cnblogs.com/tflsnoi/p/13754957.html