永发信息网

求拓扑排序算法的详细讲解

答案:1  悬赏:0  手机版
解决时间 2021-04-03 16:49
求拓扑排序算法的详细讲解
最佳答案
3.1AOV网

在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity),在有向图中若以顶点表示活动,有向边表示活动之间的先后关系,这样的图简称为AOV网。如下图是计算机专业课程之间的先后关系:

基础知识课程应先于其它所有课程,pascal语言课程应先于数据结构。

3. 2 拓扑排序

在AOV网中为了更好地完成工程,必须满足活动之间先后关系,需要将各活动排一个先后次序即为拓扑排序。如上图的拓扑排序

基础知识;Pascal;数据结构;离散数学。或

基础知识;离散数学Pascal;数据结构。

拓扑排序的方法和步骤:

(1)在图中选一个没有前趋的顶点并输出之

(2)删除该顶点及由它发出的各边,直到图中不存在没有前趋的顶点为止。

若图中存在回路,拓扑排序无法进行。

以下是将一AOV网进行拓扑排序的算法:

网采用邻接矩阵A表示,若a[i,j]=1,表示活动i先于j,a[i,j]=0,表示活动i与j不存在先后关系。

(1)计算各顶点的入度

(2)找入度为零的点输出之,删除该点,且与该点关联各点的入度减1

(3)若所有顶点都输出完毕。

程序如下:

program tppv;
const maxn=100;
var
map:array[1..maxn,1..maxn] of byte;
into:array[1..maxn] of byte;
n,i,j,k:byte;
procedure init;
var
i,j:integer;
begin
read(n);
for i:=1 to n do
for j:=1 to n do
begin
read(map[i,j]);
inc(into[j]);
end;
end;
begin
init;
for i:=1 to n do
begin
j:=1;
while (j<=n)and(into[j]<>0) do inc(j);
write(j,' ');
into[j]:=255;
for k:=1 to n do
if map[j,k]=1 then dec(into[k]);
end;
end.

3.3应用举例与练习

例:士兵排队问题:

有N个士兵(1<=N<=100),编号依次为1,2,...,N.队列训练时,指挥官要把士兵从高到矮排成一行,但指挥官只知道“1 比2 高,7 比 5高”这样的比较结果。

输入文件:第一行为数N(N〈=100);表示士兵的个数。以下若干行每行两个数A,B 表示A高于B。

输出文件:给出一个合法的排队序列。

程序如下:

program tppv;
const maxn=100;
var
map:array[1..maxn,1..maxn] of byte;
into:array[1..maxn] of byte;
n,i,j,k:byte;
fp:text;
procedure init;
var
i,j:integer;
begin
assign(fp,'tp.txt');
reset(fp);
readln(fp,n);
fillchar(map,sizeof(map),0);
fillchar(into,sizeof(into),0);
while not(seekeof(fp)) do
begin
readln(fp,i,j);
map[i,j]=1 ;
inc(into[j]);
end;
close(fp);
end;
begin
init;
for i:=1 to n do
begin
j:=1;
while (j<=n)and(into[j]<>0) do inc(j);
write(j,' ');
into[j]:=255;
for k:=1 to n do
if map[j,k]=1 then dec(into[k]);
end;
end.

练习:

Z语言问题:Z语言的基本字母也是26个,不妨用a到z表示,但先后顺序与英语不同。

现在按Z语言的顺序给出了N个单词,请依照这些单词给出一个可能的Z语言字母顺序。

输入文件:第一行一个数N(N<=100)表示单词的个数。

第二行到第N+1行,每行一个单词。

输出文件:仅一行,可能的字母顺序。

(图不好粘贴)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
直通车开始大词的转化很稳定突然两三天很低是
除名对公务员政审有影响吗在国企工作国,因旷
没写作业的检讨书500字
种树和种鸟怎么能联系起来呢?告诉我们什么道
什么是钢筋双面搭接焊
老大结婚怎么祝贺语,江湖大哥。贺词要大方得
长沙银行是国企??还是私人银行?长沙银行要
大家觉得哪款好看鞋子?
我玩骑马与砍杀战团,加入维吉亚,成为一名领
下边的算式由1到9这九个不同的数字组成。请在
吃早餐,吃了5块钱我拿了50给他,他找了我95
牡丹江至虎林的依维柯都几点发?
王师傅3小时做了24个零件,1小时做多少个零件
里皮执教过尤文图斯吗?在哪几年?
leacree线下安装店在哪里有?
推荐资讯
如果你得了绝症,只剩一个月了,你会怎么度过
男龙12月16女龙4月25婚姻今生的缘分
数学题下面汉字分别代表不同的数字,请你想一
广东涉外经济职业技术学院有哪些专业
狼被捕兽夹夹住前腿会怎么办会咬断自己的前腿
老人会不会喜欢吃大侠海苔寿司有给老人做过的
我有95岁了去不了银行这怎么办
九五香烟外面皮上都有数字喷码吗
滑动变阻器是通过改变电阻丝的长度来逐渐改变
电脑上把四五个文件筐起来怎么筐
姓吴的当代书法家
为啥汽车越来越便宜,多数消费者还是买不起
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?