首页 > 其他分享 >4. 飞机降落-dfs

4. 飞机降落-dfs

时间:2024-04-05 19:30:13浏览次数:21  
标签:10 飞机 20 int dfs 降落

4.飞机降落 - 蓝桥云课 (lanqiao.cn)

2
3
0 100 10
10 10 10
0 2 20
3
0 10 20
10 10 20
20 10 20
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
struct plane{
    int t,d,l;
}p[12];
int n;
//pan数组用来判断当前飞机降落了么,true代表降落了,false没降落
bool pan[12];
//cnt是已经降落的飞机个数,time是上一个降落的飞机的降落时间
bool dfs(int cnt,int time){
//    先判断一下如果已经降落了n个飞机
//    那么直接return行了,已经可以输出yes了
    if(cnt>=n)
        return true;
//    如果飞机还没降落完执行下面的,把n架飞机遍历一遍
    for(int i=0;i<n;i++){
//        先看看当前飞机降落了么,如果没降落 pan数组是false
//        false取反为true,执行下面代码
        if(!pan[i]){
//            先让pan数组为true,代表这个飞机降落了
            pan[i]=true;
//            如果飞机最晚降落时间在当前时间的前面
//            说明不符合要求,时间已经过去了
            if(p[i].t+p[i].d<time){
//                pan数组变成false回溯
                pan[i]=false;
                return false;
            }
//            说明符合要求,执行下面代码
//            计算一下当前飞机降落完是什么时候
            int t=max(time,p[i].t)+p[i].l;
//            递归调用
//            如果为if判断为true说明这条路能走下去,返回true
            if(dfs(cnt+1,t))
                return true;
//            否则,说明这条路不通,即当前飞机不能降落
//            应该让别的飞机先降落,然后这架飞机在后面再降落
//            所以需要回溯
            pan[i]=false;
        }
    }
//    如果一个true都不满足,则返回false,千万别忘了
    return false;
}
void solve(){
//    每组有n行飞机的数据
    cin>>n;
//    输入n行飞机的数据
    for(int i=0;i<n;i++)
        cin>>p[i].t>>p[i].d>>p[i].l;
    if(dfs(0,0))
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
//    因为有t组每一组不相通
//    所以要把pan数组 置为初始值
    for(int i=0;i<n;i++)
        pan[i]=false;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //因为有t组
    int t;
    cin>>t;
    while(t--)
        solve();
    return 0;
}

标签:10,飞机,20,int,dfs,降落
From: https://blog.csdn.net/weixin_73214301/article/details/137407169

相关文章

  • 蓝桥杯,省赛,dfs专题,地宫取宝,小朋友崇拜圈,飞机降落
    #include<bits/stdc++.h>usingnamespacestd;intn,m,k;inta[55][55];//输入所给数组值所分配的内存空间intdp[55][55][15][15];//开创记忆化的存储空间//因为只进行向下走和向右走,所有写成这个样子,不明白的可以在了解以下笛卡尔积,向下是x轴,向右是y轴(一般情况下)int......
  • dask读取hdfs文件时报错connect hdfs error
    问题详情:/arrow/cpp/src/arrow/filesystem/hdfs.cc:51:Failedtodisconnecthdfsclient:IOError:HDFShdfsFS::Disconnectfailed,errno:9(Badfiledescriptor)Traceback(mostrecentcalllast):File"/home/tdops/fucheng.pan/ray-code/read.py",line......
  • windos上安装hadoop并将文件上传至HDFS的操作
    参考1参考21.下载并安装hadoop下载解压hadoop:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.1/百度网盘:安装包和配置文件链接:(https://pan.baidu.com/s/1SyORDDF5hxmm5-dZPuHNhA?pwd=1234)注意:我使用的是2.7.1版本,官网的Hadoop不支持Windows系统,需要修改......
  • 图的遍历-DFS
    1.DFS遍历DFS算法的思想:对一个无向连通图,在访问图中某一起始顶点v后,由v出发,访问它的某一邻接顶点w1;再从w1出发,访问与w1邻接但还没有访问过的顶点w2;然后再从w2出发,进行类似的访问;…;如此进行下去,直至到达所有邻接顶点都被访问过的顶点u为止;接着,回退一步,回退到前一......
  • DFS 全排列问题 C语言代码
    深度优先搜索(DFS)是一种遍历算法,尽可能深地向子树中的结点搜索,直到达到一定的深度,再回溯到上层的结点,继续搜索未被访问的结点。全排列问题给定4个数1234,求他们所有可能的排列结果。代码#include<stdio.h>voiddfs(intx);inti;inta[4];intresult[4];/......
  • DFS:深搜+回溯+剪枝解决排列、子集问题
                      创作不易,感谢三连支持!! 一、全排列I.-力扣(LeetCode)classSolution{public://全局变量vector<vector<int>>ret;vector<int>path;boolcheck[6];vector<vector<int>>permute(vecto......
  • dfs 序求 LCA!
    前言为什么用dfs序求LCA而不用欧拉序?帅常数小,也就一半好玩反正没什么正经理由。正文定义dfs序是指对树进行深度优先遍历后得到的节点序列。\(\mathit{dfn}_i\)是节点\(i\)在dfs序中的位置(从\(0\)或\(1\)开始无影响)。LCA是最近公共祖先。深度\(\ma......
  • dfs 序求 LCA!
    前言为什么用dfs序求LCA而不用欧拉序?帅常数小,也就一半好玩反正没什么正经理由。正文定义dfs序是指对树进行深度优先遍历后得到的节点序列。\(\mathit{dfn}_i\)是节点\(i\)在dfs序中的位置(从\(0\)或\(1\)开始无影响)。LCA是最近公共祖先。深度\(\ma......
  • 大数据实验统计-1、Hadoop安装及使用;2、HDFS编程实践;3、HBase编程实践;4、MapReduce编
    大数据实验统计1、Hadoop安装及使用;一.实验内容Hadoop安装使用:1)在PC机上以伪分布式模式安装Hadoop;2)访问Web界面查看Hadoop信息。二.实验目的1、熟悉Hadoop的安装流程。2、熟悉Hadoop访问Web界等基本操作。大数据实验一,Hadoop安装及使用-CSDN博客文章浏览阅读149次,点赞3......
  • DFS算法
    DFS,即深度优先搜索(Depth-FirstSearch),是一种用于遍历或搜索树或图的算法。它从起始节点开始,沿着树的深度尽可能远的路径探索,直到达到最深的节点,然后回溯到上一个节点,继续探索其他分支。DFS通常使用递归或栈来实现。以下是一些常见的DFS算法和应用:二叉树的DFS:在二叉树中,DF......