洛谷 P1596 [USACO10OCT]Lake Counting S(dfs,搜就完事儿了

该博客主要解析了洛谷P1596题目的解决方案,涉及利用dfs搜索方法来计算地图中水池的总数。在搜索过程中,遇到水池区域会进行标记,并避免重复搜索,同时介绍了如何进行有效的减枝操作和何时更新最大值。代码中用-2,-1,0分别表示不同的地形类型。
摘要由CSDN通过智能技术生成

洛谷 P1596
题目大意:
找一块儿地中水池的个数。
基本思路:
找到一个水池块时,将所有与他相连的水池块全部标记。
且不越过旱地块儿。
减枝操作:如果这个水池块儿搜过,那么就不用再搜了。
什么时候更新最大值?
当主函数中的循环,搜到新的水池块儿时,
也是第一次搜到这个点,ans++。

预处理:

for(i=0;i<n;i++){
   
        for(j=0;j<m;j++) {
   
            cin>>c;
            if(c=='W') k[i][j]=0;//水
            else k[i][j]=-1;//地
        }
    }
void dfs(int x,int y,int s){
   //坐标,旁边的数
    if(x<0||x>=n||y<0||y>=m) return;//超边界
    if(k[x][y]==-1) return;//旱地
    if(k[x][y]!=0) return;//同一个水池中该点走过,减枝
    if(s==-2&&k[x][y]==0) {
   //新的水塘,-2只是表示这是第一次来到这点
        ans++;
        s=ans;
    }
    k[x][y]=s;//更新
    int i;
    for(i=0;i<8;i++){
   
        dfs(x+f1[i],y+f2[i],k[x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值