DFS之草坪找人

Posted jcahsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFS之草坪找人相关的知识,希望对你有一定的参考价值。

技术图片

 

 技术图片

 

 

#include<cstdio>
#include<string>
using namespace std;
int n,m,cnt; //分别为地图规模,和需要多少人 
char map[105][105]; //存储地图值 
bool vis[105][105]; //存储是否走过 
void dfs(int x,int y){
    if(x<0||x>=n||y<0||y>=m||map[x][y]==.||vis[x][y]){
        return;
    }//边界判断,递归的出口 
    vis[x][y]=true;//满足条件可以走,标记1 
    dfs(x+1,y);
    dfs(x-1,y);
    dfs(x,y+1);
    dfs(x,y-1);
    //向其相邻周边探索,是就标记 
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++){
        scanf("%s",map[i]);
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(!vis[i][j]&&map[i][j]==#){
                dfs(i,j);
                cnt++;
            }
        }
    }//逐个点判断 
    printf("%d
",cnt);
    return 0;
}

思想:用DFS都找一遍,遍历整个地图然后每个点用dfs去找,找到草坪就标记,在遍历整个地图的时候若当前点是前一个点的相邻点,因为在前一个点的dfs搜索中已经标记了当前点,所以在当前点的条件判断中不会进入当前点的dfs。

以上是关于DFS之草坪找人的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1643 / P2666 [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪

GIS中不同图层的区域重叠,怎么从一个图层中把另一个区域扣出来,用手动找子图不行啊

经典算法之深度优先搜索(DFS)

2018 女生赛 F - 赛题分析

《构建之法》读后感04

dfs与dp算法之关系与经典入门例题