C++作业问题

一:用类写双向链表

(一)关于头文件中的ifndef/define/endif

详情(未总结):

https://blog.csdn.net/DX390609/article/details/129026119?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171648518816800213011768%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171648518816800213011768&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-129026119-null-null.142

(二)关于nullptr

详情:https://blog.csdn.net/qq_41687938/article/details/120233707?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171654844416800186532251%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171654844416800186532251&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-120233707-null-null.142^v100^control&utm_term=c%2B%2B%E4%B8%ADnull%E5%92%8Cnullptr%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

(三)删头尾结点须考虑仅一个元素情况

以删头节点例,此时还需考虑尾节点的指针改为nullptr。

//学习到此处:删尾节点

(四)细节注意

1.时刻不忘head==nullptr的情况

2.一定记得头尾节点的指针就可以理解为头尾节点,prev和next可以直接理解为前/后一个节点

不要把prev和next理解为“左手”“右手”,而是“左边的人”和“右边的人”

作业车间调度问题是一个经典的组合优化问题,主要是解决在多个作业需要在多个机器上进行处理时,如何安排作业的顺序和分配机器的问题,以最小化完成所有作业的时间。 在C++中,可以使用贪心算法、动态规划等算法来解决作业车间调度问题。以下是一个使用贪心算法的C++示例代码: ```cpp #include <iostream> #include <algorithm> using namespace std; // 定义作业结构体 struct Job { int id; // 作业编号 int machine; // 机器编号 int time; // 作业处理时间 }; // 按照作业处理时间从小到大排序 bool cmp(Job a, Job b) { return a.time < b.time; } // 计算作业完成时间 int calcFinishTime(Job jobs[], int n) { int finishTime[n]; int maxTime = 0; for (int i = 0; i < n; i++) { int machine = jobs[i].machine; int time = jobs[i].time; if (i == 0) { finishTime[i] = time; } else { finishTime[i] = finishTime[i-1] + time; } maxTime = max(maxTime, finishTime[i]); } return maxTime; } // 贪心算法解决作业车间调度问题 int scheduleJobs(Job jobs[], int n, int m) { sort(jobs, jobs+n, cmp); // 按照作业处理时间排序 int machineTime[m] = {0}; // 记录每个机器的可用时间 for (int i = 0; i < n; i++) { int machine = jobs[i].machine; int time = jobs[i].time; jobs[i].id = i + 1; // 给作业编号 machineTime[machine] += time; // 更新机器可用时间 } sort(jobs, jobs+n, cmp); // 按照作业处理时间排序 return calcFinishTime(jobs, n); // 计算作业完成时间 } int main() { int n = 5; // 作业数量 int m = 3; // 机器数量 Job jobs[] = {{0, 0, 2}, {0, 1, 4}, {0, 2, 3}, {0, 1, 1}, {0, 2, 4}}; // 作业列表 int finishTime = scheduleJobs(jobs, n, m); // 计算作业完成时间 cout << "最短完成时间:" << finishTime << endl; return 0; } ``` 该示例代码中,先按照作业处理时间从小到大排序,然后根据贪心算法,将作业分配到可用时间最短的机器上处理。最后计算所有作业完成时间,输出最短完成时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值