吃早饭


私信TA

用户名:dotcpp0721969

访问量:4245

签 名:

等  级
排  名 2424
经  验 2315
参赛次数 0
文章发表 22
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:
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 人评分

  评论区

dfs函数最后哪里的return false有什么用啊
2024-03-31 18:23:53
  • «
  • 1
  • »