首页 > 代码库 > POJ LAKE COUNTING 2386

POJ LAKE COUNTING 2386

基本的dfs的题,看了挑战程序设计这本书对这个算法有了些初步的了解,通过不断的查找不断的更改,找到连在一起的块,提交poj的时候compile error 了两次,第一次没有修改编译器,可能是很久没做题的原因了吧,然后就是纠结是否输入的时候要加循环,导致while 的括号多了一个,我的codeblocks也没发现这个bug,算了,acm的题还是多练吧

#include<iostream>
#include<cstdio>
using namespace std;
const int MAX_N=101,MAX_M=101;
int n,m;
char field[MAX_N][MAX_M];
void dfs(int x,int y){
    field[x][y]=‘.‘;
    for(int xn=-1;xn<=1;xn++){
        for(int yn=-1;yn<=1;yn++){
            int xx=xn+x;
            int yy=yn+y;
            if(0<=xx&&xx<=n&&0<=yy&&yy<=m&&field[xx][yy]==‘W‘)
                dfs(xx,yy);
        }
    }
}
void solve(){
    int res=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(field[i][j]==‘W‘){
                dfs(i,j);
                res++;
            }
        }


    }
    printf("%d\n",res);
}
int main(){
    cin>>n>>m;
   // char field[MAX_N][MAX_N+1];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>field[i][j];
        }
    }
    solve();
   
    return 0;
}

POJ LAKE COUNTING 2386