一个简单的深度搜索, 这个原来看起来可难了

来源:互联网 发布:java无参构造方法举例 编辑:程序博客网 时间:2024/05/29 23:44
#include <stdio.h>#define MAX_N 100#define MAX_M 100using namespace std;int N,M;char field[MAX_N][MAX_M+1] = {{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},{'.','W','.','W','.','.','.'},}; // 园子//  现在位置(x,y)void dfs(int x,int y){    //  将现在的位置替换为.    field[x][y] = '.';    //  循环将遍历移动的8个方向    for (int dx = -1;dx <= 1;dx ++){        for (int dy = -1;dy <= 1;dy ++){            //  向x方向移动dx,向y方向移动dy,            //  移动的结果为(nx,ny)            int nx = x + dx,ny = y + dy;            //  判断(nx,ny)是不是在园子里,以及是否有积水            if (0 <= nx && nx < N && 0 <= ny && ny < M && field[nx][ny] == 'W') dfs(nx,ny);        }    }    return ;}int main(){    int res = 0;    scanf("%d %d",&N,&M);    for (int i = 0;i < N;i ++){        for (int j = 0;j < M;j ++){            if (field[i][j] == 'W'){                //  从有W的地方开始dfs                dfs(i,j);                res ++;            }        }    }    printf("%d\n",res);}

原创粉丝点击