解题思路:
n限制小,选择暴力枚举,找到降落顺序,详细注释
注意事项:
参考代码:
#include using namespace std; const int N = 10+20; struct plane{ int t,d,l; }p[N];//飞机 int n; bool sc[N];//记录飞机是否成功降落 bool dfs(int u,int time){//u表示安排到第几架飞机,time表示上一架飞机降落的时间 if(u>=n) return true;//当u>=n时表示所有的飞机都降落成功,返回true for(int i=0;i<n;i++){//遍历飞机数组 if(!sc[i]){//找到还没有降落的飞机看是否满足降落条件 sc[i] = true;//先标记成功降落 if(p[i].t+p[i].d < time){//当该飞机到达时间与盘旋时间和小于上一架飞机降落时间 //说明这架飞机不能成功降落,回溯降落状态, sc[i] = false; //并且这架飞机在此序列无法成功降落那么后续也无法成功(time会增大,if条件也不会满足) return false; } //得到这架飞机降落的时间 // max(time,p[i].t):飞机开始降落前花费的时间 //值为time时:飞机到达但上一架飞机还未落地,只能等到上一飞机落地后开始降落 //值 p[i].t: 飞机到达且上一架飞机已经落地,到达后就降落 int t = max(time,p[i].t) + p[i].l; //确定该架飞机此时降落 ,继续寻找下一个降落的飞机 if(dfs(u+1,t)) return true;//该降落顺序飞机全部能降落 //后续有飞机不满足降落条件,回溯前面的降落顺序,重新寻找 sc[i] = false; } } return false;//当第u架飞机可以降落,但后续的飞机都无法在此基础上成功降落, //if(dfs(u+1,t)) return true;他执行的条件是在这个第u架飞机降落基础上后续的飞机存在合理的降落次序 //当后续的飞机不存在合理的降落次序时dfs(u+1,t) 就返回的是false, //此时就要最后的return false去返回false } void solve(){ cin>>n; for(int i=0;i>p[i].t>>p[i].d>>p[i].l; sc[i] = false; } if(dfs(0,0)) cout<<"YES"<<endl; else cout<<"NO"<>t; while(t--){ solve(); } return 0; }
0.0分
11 人评分
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:774 |
C二级辅导-计负均正 (C语言代码)浏览:556 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
程序员的表白 (C语言代码)浏览:706 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:760 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:760 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:561 |
1124题解浏览:630 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:1968 |
吃早饭 2024-03-31 21:26:45 |
if(dfs(u+1,t)) return true;他执行的条件是在这个第u架飞机降落基础上后续的飞机存在合理的降落次序 当后续的飞机不存在合理的降落次序时dfs(u+1,t) 就返回的是false,此时就要最后的return false去向上返回false