算法学习:任务调度(),《算法笔记》6.6小节——C++标准模板库(STL)介绍->priority_queue的常见用法详解
2020-04-05 12:13
465 查看
题目描述
读入任务调度序列,输出n个任务适合的一种调度方式。
输入
输入包含多组测试数据。
每组第一行输入一个整数n(n<100000),表示有n个任务。
接下来n行,每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。
输出
输出调度方式,输出如果有多种适合的调度方式,请输出字典序最小的一种。
样例输入
4
Task0(Task1,Task2)
Task1(Task3)
Task2(NULL)
Task3(NULL)
样例输出
Task0 Task1 Task2 Task3
思路
设置优先级,在这里我用较小数字表示较高优先级,每行输入的括号内的任务名仅仅做优先级的更新,用map来映射string对应的优先级int,当括号内的任务对应整数小于括号外的对应整数时,更新,将括号内的任务对应整数加一。
全部数据输入完成后,将map中的任务名string和优先数int以结构体的形式加入优先队列。
优先队列默认是从大到小排序,包括字典序和整数排序,所以要对结构体的比较运算‘<’进行重构。
需要注意的一点,重载大于号会出错,因为数学上x1>x2,和x2<x1是一样的,所以只需要重载小于号。
#include<iostream> #include<cstdio> #include<queue> #include<string> #include<map> using namespace std; struct task{ string name; int prior; friend bool operator <(task t1,task t2){ if(t1.prior!=t2.prior) return t1.prior>t2.prior; else return t1.name>t2.name; } }; int main() { int n; priority_queue<task> q; cin>>n; int p=0; map<string,int> mp; for(int i=0;i<n;i++) { string s,t=""; cin>>s; string tname; for(int j=0;j<s.size();j++) { if(s[j]=='(') { if(t=="NULL") continue; if(mp.find(t)==mp.end()) { mp[t]=0; } tname=t; t=""; } else if(s[j]==','||s[j]==')') { if(t=="NULL") continue; mp[t]=mp[tname]+1; t=""; } else{ t+=s[j]; } } } for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++) { task t1; t1.name=it->first; t1.prior=it->second; q.push(t1); //cout<<t1.name<<" "<<t1.prior<<endl; } int k=q.size(); for(int i=0;i<k-1;i++) { task t1=q.top(); cout<<t1.name<<" "; q.pop(); } cout<<q.top().name<<endl; return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【用法详解】C++-STL 队列queue与优先队列priority_queue的用法详解与学习心得
- c++ 标准模板库 STL 算法之 for_each 函数的使用用法详解
- C++ STL容器 优先队列(priority_queue)用法详解 (图文详解)(全网最详细 简单易懂)
- C++ 标准模板库STL 优先级队列 priority_queue 使用方法与应用介绍(一)
- c++ 标准模板库 STL 算法之 for_each 函数的使用用法详解
- C++学习 STL之二:vector容器用法详解
- C++ STL 学习笔记 priority_queue
- C++学习 STL之一:字符串用法详解
- C++ stl队列Queue用法介绍:删除,插入等操作代码举例
- 【c++】STL里的priority_queue用法总结
- C++ 标准模板库STL中vector用法介绍
- C++-STL Priority_queue(优先队列)学习
- C++ stl队列Queue用法介绍:删除,插入等操作代码举例
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- C++学习 STL之四:list用法详解
- C++ 标准模板库STL中map用法介绍
- 【c++】标准模板库STL入门简介与常见用法
- C++STL priority_queue 学习
- C++ stl队列queue用法介绍
- STL学习之八:priority_queue用法示例