- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
【题22】士兵排队
有n个士兵(1≤n≤26),编号依次为A、B、C、??。队列训练时,指挥官要把一些士兵从高到矮依次排成一行。但现在指挥官不能直接获得每个人的身高信息,只能获得“p比p高”这样的比较结果(p,
1 2 1
p∈{’A’‥’Z’}),记为pp。例如AB,BD,FD。士兵的身高关系下图所示
2 1 2
对应的排队方案有三个:AFBD、FABD、ABFD。输入k行,每行为ab,表示ab
输出排队方案
分析:
士兵的身高关系对应一张有向图,图中的顶点对应一个士兵,有向边v,v表示士兵i高于士兵j。
i j
我们按照从高到矮将士兵排出一个线性的顺序关系,即为对有向图的顶点进行拓扑排序。
⑴拓扑序列的定义
拓扑排序是有向图的另一种重要运算。给出有向图G=(V,E)。若顶点的线性序列v’,…,v’(v’∈V,
1 n i
1≤i≤n)满足如下条件:
v’至v ’有一条路径(1≤kn-1)
k k+1
则称该序列为拓扑序列。
一个有向图结点的拓扑序列不是唯一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图是不能排的。例如下图所示的有环图
从其中任何一个结点出发,都可经由其它两个项点返回本身,因此就无法把结点排成满足条件的序列。任何无环的有向图,其结点都可以排出一个拓扑序列。
⑵拓扑序列的计算
下面给出拓扑排序的方法
⑴从图中选择一个入度为0的结点且输出之;
⑵从图中删除该结点及其所有出边(即与之相邻的所有结点的入度减一);
反复执行这两个步骤,直至所有结点都输出了,也就是整个拓扑排序完成了。或者直至剩图中再没有入度为0的结点,这就说明此图中有环,拓扑排序不能再进行下去了。例如
对于士兵排队问题,我们首先构造一张有向图G:var
g:array[’A’‥’Z’,’A’‥’Z’]of0‥1; {图的相邻矩阵}d:array[’A’‥’Z’]ofinteger; {结点的度数序列}s:setof ’A’‥’Z’; {士兵名集合}
图中的结点为士兵。若ab,则g[a,b]←1(即a向b引入一条有向边);计算结点b的入度(即比士兵b
高的人数)d(b)←d(b)+1。显然最高士兵对应的结点入度为0:
s←[]; {士兵名集合初始化}
while 文件未输入完dobegin
读ab信息;
if(a∈{’A’‥’Z’})and(b∈{’A’‥’Z’})
thenbegin
s←s+[a,b]; {计算士兵名集合}
g[a,b]←1; {构造有向边(a,b)}
d[b]←d[b]+1; {累计结点b的入度}
end;{then}end;{while}
然后通过下述方法计算士兵名字符集m和士兵人数km←’’;
fora=’A’to ’Z’do
ifa sthenm←m+a;k←length(m);
接下来对有向图G作拓扑排序。若图G中有回路,则排队方案不存在;否则拓扑序列n即为一个排队方案。拓扑排序的过程如下:
n←’’; {拓扑序列n初始化为空}
fori:=1tokdo {依次搜索每一个出列士兵}
beginj←1;
while(d[m[j]]0)and(j≤k)doj←j+1; {搜索第i个入度为0的结点序号j}
ifjkthen {若入度为0的结点不存在,则队列不存在最高的士兵,无解退出}thenbegin
输出失败信息;halt;
end;{then}
n←n+m[j] {入度为0的结点j进入拓扑序列n}a←m[j]; d[a]←∞;
forj:=1tokdo {删去结点j}
ifg[a,m[j]]0thend[m[j]]←d[m[j]]-1;end;{for}
输出拓扑序列n;
计算拓扑序列的时间复杂度为W(n2)
您可能关注的文档
- 施工组织设计采砂.docx
- 施工组织设计挡土墙.docx
- 施工组织设计—防火门、卷帘门.docx
- 施工组织设计——机械顶管.docx
- 施工组织设计交底记录.docx
- 施工组织设计施工总体部署.docx
- 施工组织总体设想 方案针对性及施工段划分.docx
- 施耐德ATV 变频器说明书.docx
- 施耐德低压电器选型.docx
- 施能CZB3J自动充电机介绍.docx
- 初中英语人教版七年级上册第四单元Where is my schoolbag ! Section A .ppt
- 初中英语人教版七年级上册第四单元Where is my schoolbag Section B 2.ppt
- 初中英语人教版七年级下册 Unit 6 I'm watching TV. Section A 11a.pptx
- 注册土木工程师培训课件.ppt
- 初中生物济南版七年级上册第一章奇妙的生命现象 第三节生物学的探究方法.ppt
- 初中英语人教版七年级上册第四单元Where is my schoolbag Section B 2.pptx
- 注册安全工程师案例课件.ppt
- 初中物理人教版八年级上册第二章第4节噪声的危害和控制课件(共19张PPT).pptx
- 注册安全工程师王阳课件.ppt
- 初中数学青岛版八年级上2.4《线段的垂直平分线》课件(16张PPT).ppt
原创力文档


文档评论(0)