L2-4-深度优先搜索 功夫传人 (25 分)

感动啊,时隔多年,我终于会dfs了!!
这道题当初背代码背得很难受,当初觉得真的是很难的一道题目,一直背代码,改代码,始终不得要领。现在终于会做了,知道这道题目的每一个注意点是什么了,我都很清楚,也算是真正理解并且熟练运用了dfs

  • 你会发现一道题目,其实写的东西,代码量并不多,你读入数据就会占据很大一部分代码量,其实你自己写的不多
  • dfs呢,你进形参的东西的其实就是你需要带进这个旅途的东西,就是会根据你的每一层会不断变化的东西。然后你放进形参中托管。如果一个东西它不会随着你每一层的进进出出而变化,那么你就不用带进去了。
  • 然后你就信任你的dfs啦,它会给你把每一层需要的值都准备好,因为你已经托管给它了,所以它会帮你安排每一层你需要的值啦。就是如果是dfs的话,它是深度优先的搜索,就是说这个托管的值会反复横跳,先不断变深,然后再回回来。但是你可以放心,它在它应该在的那一层的数值一定是刚好那一层需要的。
  • dfs的时候用auto挺好用的,而且更好理解。
  • return 不是必须的,就像这一题,return 就不是必须的,删掉没有影响。
  • dfs里面那个else是有影响的,很重要!!!!
#include<bits/stdc++.h>

using namespace std;

const int N = 1e5+10;
int n;
double z,r,res;

vector<int> v[N];

bool dedaozhe[N];

void dfs(double gong,int root){
    if(dedaozhe[root] == true ){
        gong = gong * v[root][0];
        res = res + gong;
        return;
    }
    else{
        for(auto it:v[root]){
            dfs(gong * (100 - r)/100 , it);
        }
    }
}

int main(){
    cin>>n>>z>>r;
    int num;
    for(int i=0;i<n;i++){
        cin>>num;
        if(num == 0){
            dedaozhe[i] = true;
            int k;
            cin>>k;
            v[i].push_back(k);
        }
        else{
            while(num--){
                int er;
                cin>>er;
                v[i].push_back(er);
            }
        }
    }
    dfs(z,0);
    cout<<(int)res;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值