2025年C++数据结构机试题及答案_第1页
2025年C++数据结构机试题及答案_第2页
2025年C++数据结构机试题及答案_第3页
2025年C++数据结构机试题及答案_第4页
2025年C++数据结构机试题及答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年C++数据结构机试题及答案【问题描述】任务调度系统需要处理动态添加的任务及其依赖关系,并支持查询从指定起始任务开始的最短完成总时间(即关键路径长度)。每个任务有唯一的ID和执行时间,任务执行前需完成所有前置任务。系统需支持以下两种操作:1.添加任务:格式为"ADD<任务ID><执行时间><前置任务数><前置任务ID列表>"(若前置任务数为0,则列表为空)2.查询任务:格式为"QUERY<起始任务ID>",输出从该起始任务开始,完成所有可执行任务的最短总时间(即所有可能路径中的最长路径长度)输入保证:-所有任务ID为字符串,由字母和数字组成,长度不超过10-执行时间为正整数-添加任务时,所有前置任务已存在-任务依赖关系构成有向无环图(DAG)【输入样例】5ADDA30ADDB21AADDC41AADDD52BCQUERYA【输出样例】12【答案】```cppinclude<iostream>include<unordered_map>include<vector>include<queue>include<string>include<algorithm>include<climits>usingnamespacestd;structTask{inttime;vector<string>preds;vector<string>succs;};unordered_map<string,Task>tasks;vector<string>get_reachable(conststring&start){vector<string>reachable;if(tasks.find(start)==tasks.end())returnreachable;unordered_map<string,bool>visited;queue<string>q;q.push(start);visited[start]=true;reachable.push_back(start);while(!q.empty()){stringu=q.front();q.pop();for(conststring&v:tasks[u].succs){if(!visited[v]){visited[v]=true;reachable.push_back(v);q.push(v);}}}returnreachable;}vector<string>topological_sort(constvector<string>&nodes){unordered_map<string,int>in_degree;unordered_map<string,vector<string>>adj;for(conststring&u:nodes){adj[u]=tasks[u].succs;in_degree[u]=0;for(conststring&p:tasks[u].preds){if(find(nodes.begin(),nodes.end(),p)!=nodes.end()){in_degree[u]++;}}}queue<string>q;for(conststring&u:nodes){if(in_degree[u]==0){q.push(u);}}vector<string>topo;while(!q.empty()){stringu=q.front();q.pop();topo.push_back(u);for(conststring&v:adj[u]){if(find(nodes.begin(),nodes.end(),v)!=nodes.end()){in_degree[v]--;if(in_degree[v]==0){q.push(v);}}}}returntopo;}intquery(conststring&start){vector<string>reachable=get_reachable(start);if(reachable.empty())return0;vector<string>topo=topological_sort(reachable);if(topo.size()!=reachable.size())return0;unordered_map<string,int>dp;intmax_time=0;for(conststring&u:reachable){dp[u]=INT_MIN;}dp[start]=tasks[start].time;max_time=dp[start];for(conststring&u:topo){for(conststring&v:tasks[u].succs){if(find(reachable.begin(),reachable.end(),v)!=reachable.end()){if(dp[v]<dp[u]+tasks[v].time){dp[v]=dp[u]+tasks[v].time;if(dp[v]>max_time){max_time=dp[v];}}}}}returnmax_time;}intmain(){intn;cin>>n;stringop;while(n--){cin>>op;if(op=="ADD"){stringid;intt,k;cin>>id>>t>>k;Tasktask;task.time=t;for(inti=0;i<k;++i){stringpred;cin>>pred;task.preds.push_back(pred);tasks[pred].succs.push_back(id);}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论