拓扑排序(A0V网)

AOV网

在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(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.


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值