四连块dfs

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int MAX = 100;
 5 char arr[MAX][MAX];//存放 “w 和 . ”
 6 
 7 int nx[4] = {0,1,0,-1};//4个坐标(0,1)(1,0)(0,-1)(-1,0) 
 8 int ny[4] = {1,0,-1,0};
 9 
10 int n,m;//n行,m列 
11 
12 
13 void init();
14 void solve();
15 void dfs(int x,int y);
16 
17 
18 void init(){
19     cin>>n>>m;//输入行数列数 
20     for(int i=0;i<n;i++){
21         for(int j=0;j<m;j++){
22             cin>>arr[i][j];//输入“w 和 . ” 
23         }
24     }    
25     solve();
26 } 
27 
28 
29 void solve(){
30     int result = 0;
31     for(int i=0;i<n;i++){
32         for(int j=0;j<m;j++){
33             if(arr[i][j] == 'w'||arr[i][j] == 'W'){
34                 dfs(i,j);//搜索(i,j)周围的 w 
35                 result++;
36             }
37         }
38     }
39     cout<<"四连块的数量为"<<result<<endl; 
40 }
41 
42 void dfs(int x,int y){
43     
44     arr[x][y] = '.';
45     for(int i=0;i<4;i++){
46         int X=x+nx[i];
47         int Y=y+ny[i];
48         if(X>=0&&X<=n&&Y>=0&&Y<=m&&(arr[X][Y]=='w'||arr[X][Y] == 'W')){
49             dfs(X,Y);
50         }
51     }
52 }
53 
54 int main(){
55     init();
56     return 0;
57 }

 

posted @ 2020-02-25 17:26  xuecl  阅读(274)  评论(0编辑  收藏  举报