网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构与算法图论预流推进.pptx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试题库问题 林钦仙 040320182 问题描述 假设一个试题库中有n 道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m 道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算法。 数据输入: 由文件input.txt 提供输入数据。文件第1 行有2 个正整数n 和k (2 =k= 20, k=n= 1000) k 表示题库中试题类型总数,n 表示题库中试题总数。第2 行有k 正整数,第i 个正整数表示要选出的类型i 的题数。这k 个数相加就是要选出的总题数m。接下来的n 行给出了题库中每个试题的类型信息。每行的第1 个正整数p 表明该题可以属于p 类,接着的p 个数是该题所属的类型号。 输入输出示例 input.txt output.txt 3 15 1: 1 6 8 3 3 4 2: 7 9 10 2 1 2 3: 2 3 4 5 1 3 1 3 1 3 1 3 3 1 2 3 2 2 3 2 1 3 1 2 1 2 2 1 2 2 1 3 2 1 2 1 1 3 1 2 3 主要内容 算法描述 数据结构 预流推进策略 无解情况分析 实例演示 算法描述 采用预流推进算法 把n个题目,k个题型都在网络图上用顶点表示,增加两个虚拟的节点,源和汇。 源 1 2 1 3 2 4 n 汇 k m 题型 题目 1..1 1 容量为题目给 定的该题型需 要的题目数 数据结构 题型顶点结构 class Style { public: int id; int cap;//该题型可以选择的题目数 int flow;//该题型已经选择的题目数 int sqNum;//该题型需要但未选择的题目数 int inQueue;//是否在活顶点队列中 int pri;//活顶点优先级 Style(); }; 用数组q来存储所有题型节点 Question *q=new Question[qSize+1]; Q[i]存储id为i的结点 题目顶点结构 class Question { public: int id; int sNum; bool used;//该题目是否以被某一个类型选中 Question(); }; 用数组s来存储所有题目节点 Style *s=new Style[sSize+1]; s[i]存储id为i的结点 数据结构 题型题目边采用二维数组来存储边sq[][]; Sq[i][j]=0表示题型顶点i与题目顶点j之间没有边 Sq[i][j]=1表示题型顶点i与题目顶点j之间有边 Sq[i][j]=2表示题型顶点i与题目顶点j之间的边有流经过 Sq[i][j]=3表示题型顶点i与题目顶点j之间的边曾有流经过,但最后流取消经过该边 活顶点优先队列 顶点:活顶点优先队列中存着等待流推进的题型顶点(题目顶点一成为活顶点就立刻进行流的推进,不需要队列来存储。) 优先级别:题型顶点的pri属性,初始值 s[i].pri=s[i].cap-s[i].sqNum; 初始化时,将所有的题型顶点都添加进优先队列,优先队列采用最小堆实现, 预流推进策略 题型顶点选取题目顶点增流 选取可以增流的顶点进行增流,如果已无可以增流的顶点(与该题型顶点连接的题目顶点都已经被用过了),选取一个顶点进行回流操作(一次只能对一条边回流,如果利用回流操作来增流仍不能满足流量平衡约束,则再次将该顶点加入优先队列。 int ChooseQue(Style pS,MinHeap H) 回流操作 区别优先队列中删除pri值最低的顶点,进行回流操作的是选取与该题目顶点相连且已经增流过且pri值最高的且不在优先队列中的题型顶点来进行回流。int ChooseQue(Style pS,MinHeap H) 优先级的更新s[i].pri=s[i].cap-s[i].sqNum-s[i].flow; 题型顶点i选取一个顶点,对应的边进行增流,flow++,pri--,当回流操作选中该顶点sqNum++,pri-- 无解情况分析 先天不足,要求题型i需要有t道题目,但是只有不到t个的题目属于i。 解决方案:在从输入文件中输入数据的时候就可以进行统计题型i的可选题目个数,当初始化优先队列时就可以判断出这种No Solution情况。 题目资源独占,题型选择冲突。可能存在两个题型都要求选择某题目,否则无法满足给定的题数要求。 解决方案:设置一

文档评论(0)

lzjbook118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档