7-3 任务调度的合理性(拓扑序)(C++实现)

7-3 任务调度的合理性

假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。

比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。

但是需要注意的是,对一组子任务,并不是任意的任务调度都是一个可行的方案。比如方案中存在“子任务A依赖于子任务B,子任务B依赖于子任务C,子任务C又依赖于子任务A”,那么这三个任务哪个都不能先执行,这就是一个不可行的方案。你现在的工作是写程序判定任何一个给定的任务调度是否可行。

输入格式:
输入说明:输入第一行给出子任务数N(≤100),子任务按1~N编号。随后N行,每行给出一个子任务的依赖集合:首先给出依赖集合中的子任务数K,随后给出K个子任务编号,整数之间都用空格分隔。

输出格式:
如果方案可行,则输出1,否则输出0。

输入样例1:
12
0
0
2 1 2
0
1 4
1 5
2 3 6
1 3
2 7 8
1 7
1 10
1 7
输出样例1:
1
输入样例2:
5
1 4
2 1 4
2 2 5
1 3
0
输出样例2:
0

完全按思路来,想到哪里写到哪里
首先遍历每一个vector数组中的元素看是否之前出现过,那么怎么判断是否出现过呢????
这里用了一个Set集合 存储出现过得数字
每次遍历遇到一个没见过的数字(满足条件) 就添加到set集合中
最外层的死循环有什么作用呢???
作用就是:每次遍历如果没有新的元素添加到set中就代表,已经饱和,肯定不满足条件!
就这样,我也是没想到能ac

#include"stdio.h"
#include"vector"
#include"set"
using namespace std;
struct jihe{
	vector<int> v;
} ;
int book[101]={0};
int main(){
	int n;
	int cot;
	int num;
	scanf("%d",&n);
	struct jihe ch[n+1];
	for(int i=1;i<=n;i++){
		scanf("%d",&cot);
		while(cot--){
			scanf("%d",&num);
			ch[i].v.push_back(num);
		}
	}
	set<int> Set;
	bool k=true;
	bool ll=false;
	while(1){
		ll=false;
		for(int i=1;i<=n;i++){
		if(Set.count(i)==1) continue;
		k=true;
		if(ch[i].v.empty()){
			Set.insert(i);
			ll=true;
		}
		else{
			for(int j=0;j<ch[i].v.size();j++){
				if(Set.count(ch[i].v[j])!=1){
					k=false;
					break;
				}
			}
			if(k){
				Set.insert(i);
				ll=true;
			}
		}
	}
	if(ll==false) break;
	}
	
	for(int k=1;k<=n;k++){
		if(Set.count(k)==0){
			printf("0");
			return 0;
		}
	}
	printf("1");



	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 任务调度合理性是指在任务执行的过程中,根据任务的优先级、紧急程度、资源需求等因素,合理地安排任务的执行顺序和时间,以达到最优的执行效果。合理的任务调度可以提高系统的效率和稳定性,减少资源的浪费和冲突,提高任务的执行质量和效率。同时,合理的任务调度还可以提高系统的可靠性和可维护性,降低系统的故障率和维护成本。因此,任务调度合理性对于系统的正常运行和发展至关重要。 ### 回答2: 任务调度合理性是指,在多个任务需要同时执行时,如何合理地分配和调度它们的执行顺序和资源分配,以便实现最优的执行效率和资源利用率。 首先,任务调度合理性可以提高系统的效率和资源利用率。在多任务系统中,当任务数量超过系统的处理能力时,任务调度可以合理分配处理器和其他资源,使得系统的处理能力能够得到最大化的利用,从而提高系统的效率和资源利用率。 其次,任务调度合理性还可以减少系统的响应时间和延迟。当系统中有大量的任务需要处理时,任务调度可以根据任务的优先级和紧急程度来合理分配处理时间,使得系统对高优先级的任务能够及时响应,并在最短时间内完成。 此外,任务调度合理性也可以提高系统的可靠性和安全性。通过对任务的调度和资源分配进行科学合理的规划和设计,能够有效避免资源争用和死锁等问题,保证系统的稳定性和可靠性,同时也能够保障系统的安全性。 综上所述,任务调度合理性是多任务系统中非常重要的一个方面。通过合理的任务调度和资源分配,可以最大程度地提高系统的效率和资源利用率,降低系统的响应时间和延迟,同时还可以保证系统的可靠性,安全性和稳定性,从而实现系统的高效运行。 ### 回答3: 任务调度是指操作系统对计算机中各个任务进行合理的分配和调度,优化系统资源的利用,提高计算机系统的效率和性能。在实际应用中,任务调度可以分为多类,其中包括进程调度、作业调度、实时调度等等。在这些调度过程中,一个重要的问题是如何将任务合理地分配给计算机系统的资源,以便最大化地利用系统的性能。 7-5任务调度合理性,是指任务调度与目标之间的联系是否相符。任务调度应当遵循任务的性质,确定任务的优先级,按照优先级高低或特定的调度算法来决定任务的执行顺序,以达到最优的系统性能。同时,任务调度也需要及时响应用户的请求,减少系统的延迟和响应时间,保证系统的实时性和可靠性。 任务调度合理性还需要考虑计算机系统的硬件资源和软件资源,包括CPU、内存、硬盘、网络带宽等等。在任务的分配和调度过程中,应考虑这些资源的使用情况和负载情况,避免资源的浪费和过度使用,保护系统的健康和稳定。 任务调度合理性对于计算机系统的性能和效率至关重要,它可以使计算机系统在繁忙的工作环境下高效地工作,避免系统出现过度负载或资源浪费的情况。合理的任务调度可以减少系统的延迟和响应时间,提高用户的交互体验和满意度,同时也可以减少系统的能耗和成本,保护环境和资源。 总之,任务调度合理性对于计算机系统的性能和效率有着至关重要的作用。在实际应用中,任务调度应遵循任务性质、优先级等因素,同时考虑计算机系统的硬件和软件资源负载情况,以达到最优的系统性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值