拓扑排序与关键路径在实际的应用

拓扑排序与关键路径在实际的应用
拓扑排序与关键路径在实际的应用

数学与计算机学院

课程设计说明书

课程名称: 算法设计与分析-课程设计

课程代码: 8174123 题目:拓扑排序与关键路径在实际的应用年级/专业/班:

学生姓名:

学号:

开始时间:年月日

完成时间:年月日

课程设计成绩:

指导教师签名:年月日

目录

摘要 (1)

1 引言 (2)

1.1 问题的提出 (2)

1.2 C++语言 (2)

1.3 算法设计与分析的地位 (2)

1.4拓扑排序的描述 (3)

1.5 任务与分析 (4)

2 设计方案 (4)

2.1问题描述 (4)

2.2 算法描述 (5)

2.3算法设计 (6)

2.4算法编码实现 (7)

3.系统测试 (9)

3.1图形化界面展示图及所求解的顶点和路径 (9)

3.2算法的时间复杂度分析 (10)

结论 (12)

致谢 (13)

参考文献 (14)

摘要

排课问题是现在各个学校必须面临的一个问题。而且随着近年来学生规模的扩招,教育机构的复杂化,课程各类的多样化,排课的问题越来越难。尽管目前对排课采用了程序设计的计算机智能排课系统,但是仍然存在着这样或者那样的问题。最为突出的一个问题,比如,有一些排课方案,看上去完美无缺,或者效率比较高,甚至达到了最优解,但是具体地去实施的时候,发现整个课程的设计方案有着大的漏洞,经常出现的问题是,排课的拓扑图出现了一些环,以至于进入了死循环。该文的目的就是针对于如何检测环的存在而避免错误的排课方案。本文采用的算法是基于拓扑序列的拓扑排序算法对特定条件的排课问题提出的一种解决方案,具体的实验结果是展示出一个符合条件的课程拓扑序列,整个算法的设计与实现过程将要用到邻接表,堆栈等数据结构等等。

关键词:有向图,拓扑排序,排课

1 引言

1.1 问题的提出

自1946年第一台计算机问世以来,计算机产业的飞速发展已远远超出人们对它的预料,在某些生产线上,甚至几秒钟就能生产出一台微型计算机,产量猛增,价格低廉,这就使得它的应用范围迅速扩展。如今,计算机已深入到人类社会的各个领域。计算机的应用已不再局限于科学计算,而更多地用于控制、管理及数据处理等非数值计算的处理工作。与这些相应,计算机加工处理的对象由纯粹的数值处理发展到字符、表格和图像等各种具有一定结构的数据,这就给程序设计带来一些新的问题。为了编写出一个“好”的程序,必须分析待处理的对象的特性以及处理对象之间存在的关系。这就是“算法设计与分析”这门学科形成和发展的背景。

1.2 C++语言

C语言本身存在一些局限,例如:C语言不支持代码重用,C语言对类型的检查机制相对较弱。为了解决C语言自身所具有的诸多问题,1980年,贝尔实验室的Bjarne Stroutstrup博士及其同事开始对C语言进行改进和扩充,并使C++语言在C语言的基础上发展起来。在基本语法特点方面,C++语言保持与C语言兼并,二者没有本质上的差别,大多数使用C语言编写的代码可以在C++语言中直接使用。这也是C++语言很快普及的一个重要原因。 C++语言与C语言的主要区别是编程思想上的更新,即编码由面向过程变为面向对象,基于此,C++语言引入了类与对象机制,包括类的定义,类的继承与派生,类的多态性等。在类定义方面,C++语言一方面自定义结构类型进行扩充,另一方面也支持新的类构造。数据封装和隐藏是与类的定义紧密相关,并且在C++语言中经常碰到的现象,也是C++语言中的一大特点。数据的封装和隐藏使重要的内部数据得到保护。

1.3 算法设计与分析的地位

算法设计与分析在计算机科学中是一门综合性的专业基础课。算法的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器

中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。因此,可以认为算法设计与分析是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。在计算机科学中,算法设计与分析不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。

1.4拓扑排序的描述

1.4.1拓扑排序的基本思想:

对于学生选修课程问题:顶点——表示课程;有向弧——表示先决条件,若课程i

是j的先决条件,则图中有弧。学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业——拓扑排序。AOV网——用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(Activity On Vertex network),简称AOV网。若是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继;AOV网中不允许有回路,这意味着某项活动以自己为先决条件。拓扑排序——把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫拓扑排序。检测AOV网中是否存在环方法:对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV 网必定不存在环。

1.4.2设计拓扑排序的步骤:

1、在有向图中选一个没有前驱的顶点且输出之;

1、从图中删除该顶点和所有以它为尾的弧;

3、重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止。

1.4.3拓扑排序问题的特征:

拓扑排序的有效性依赖于图本身所具有的两个重要性质:有向和无环。

1、有向:任务之间有先后关系,即有方向。

2、无环:若有环,回路中就会存在彼此矛盾的条件。

1.4.4关键路径的基本思想:

在项目管理中,关键路径是指网络终端元素的元素的序列,该序列具有最长的总工期并决定了整个项目的最短完成时间。关键路径的工期决定了整个项目的工期。任何关键路径上的终端元素的延迟将直接影响项目的预期完成时间(例如在关键路径上没

有浮动时间)。一个项目可以有多个,并行的关键路径。另一个总工期比关键路径的总工期略少的一条并行路径被称为次关键路径。最初,关键路径方法只考虑终端元素之间的逻辑依赖关系。关键链方法中增加了资源约束。用顶点表示事件,弧表示活动,弧上的权值表示活动持续的时间的有向图叫AOE(Activity On Edge Network)网。AOE网常用于估算工程完成时间。

1.4.5设计关键路径的步骤:

(1) 输入e条弧,建立AOE网的存储结构。

(2) 从源点v1出发,令ve(1)=0,求 ve(j) 2<=j<=n。

(3) 从汇点vn出发,令vl(n)=ve(n),求 vl(i) 1<=i<=n-1。

(4) 根据各顶点的ve和vl值,求每条弧s(活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)的为关键活动。

1.4.6关键路径问题的特征:

(1)求关键路径必须在拓扑排序的前提下进行,有环图不能求关键路径;

(2)只有缩短关键活动的工期才有可能缩短工期;

(3)若一个关键活动不在所有的关键路径上,减少它并不能减少工期;

(4)只有在不改变关键路径的前提下,缩短关键活动才能缩短整个工期。

1.5 任务与分析

1.掌握拓扑排序算法的基本思想,包括有向无环图的性质和基于拓扑排序的关键路径计算方法。

2.熟练掌握拓扑排序和关键路径分析方法。

3.学会利用拓扑排序和关键路径算法解决实际问题。

2 设计方案

2.1问题描述

给定一个有向无环图,其存储形式为如下所示。在此图中,从入度为0的顶点出发,删除此顶点和所有以它为尾的弧;重复直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止。

2.2 算法描述

算法分析:这道题如果用拓扑排序法,在图的顶点数稍大的情况下(比如40,100或者更大),由阶乘可知需要列举出的路径条数将是一个非常庞大的数目,故不做讨论。如果用其它方法又往往得不到最优解。在用拓扑排序考虑图的问题时可以自顶向下的分析,自底向上的计算。核心是从入度为0顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,删除该顶点和其尾弧。继续向下一个入度为0顶点做删除操作,直到全部顶点均已输出;或者当图中不存在无前驱的顶点为止。

具体步骤如下:

Step1:存储信息,将邻接矩阵数据存放到数组char indegree[40]中。

Step2:阶段划分,对于拓扑排序问题应该从上而下逐层决策,这样逐层递推求出最后结果。

Step3:关键路径的存储,用indegree [][]存储各个路径的最优值,用TopologicalOrder [][]存储路径。indegree [i][j]初始化char indegree [i][j], TopologicalOrder [i][j]初始化0,TopologicalOrder [i][j]=0为向左,等于1为向右。

Step4:信息的输出,路径最优质为TopologicalOrder [1][1],路径输出为:

if (count

else return OK;

for (j=0; j

for (p=G.vertices[j].firstarc; p; p=p->nextarc)

{

k=p->adjvex;dut=p->info;

ee = ve[j]; el = vl[k]-dut;

tag = (ee==el) ? '*' : ' ';

printf(j, k, dut, ee, el, tag); // 输出关键活动

}

return OK;

2.3算法设计

本次实验程序主要用到二维数组,以及通过动态规划法进行比较每个数的大小。主要运用两个for循环语句实现动态规划,画出流程图如下图2-1所示。

2-1流程图很直观的描述了整个程序操作过程。

2.4算法编码实现

拓扑排序:

Status TopologicalOrder(ALGraph G, Stack &T) {

// 有向网G采用邻接表存储结构,求各顶点事件的最早发生时间ve(全局变量)。 // T为拓扑序列定点栈,S为零入度顶点栈。

// 若G无回路,则用栈T返回G的一个拓扑序列,且函数值为OK,否则为ERROR。

Stack S;int count=0,k;

char indegree[40];

ArcNode *p;

InitStack(S);

FindInDegree(G, indegree); // 对各顶点求入度indegree[0..vernum-1]

for (int j=0; j

if (indegree[j]==0) Push(S, j); // 入度为0者进栈

InitStack(T);//建拓扑序列顶点栈T

count = 0;

for(int i=0; i

while (!StackEmpty(S)) {

Pop(S, j); Push(T, j); ++count; // j号顶点入T栈并计数

for (p=G.vertices[j].firstarc; p; p=p->nextarc) {

k = p->adjvex; // 对j号顶点的每个邻接点的入度减1

if (--indegree[k] == 0) Push(S, k); // 若入度减为0,则入栈

if (ve[j]+p->info > ve[k]) ve[k] = ve[j]+p->info;

}//for *(p->info)=dut()

}//while

if (count

else return OK;

} // TopologicalOrder

关键路径:

Status CriticalPath(ALGraph G)

{ // 算法7.14, G为有向网,输出G的各项关键活动。

Stack T; int a,j,k,el,ee,dut; char tag; ArcNode *p;

if (!TopologicalOrder(G, T)) return ERROR;

for(a=0; a

vl[a] = ve[G.vexnum-1]; // 初始化顶点事件的最迟发生时间while (!StackEmpty(T)) // 按拓扑逆序求各顶点的vl值

for (Pop(T, j), p=G.vertices[j].firstarc; p; p=p->nextarc)

{

k=p->adjvex; dut=p->info; //dut

if (vl[k]-dut < vl[j]) vl[j] = vl[k]-dut;

}//

for (j=0; j

for (p=G.vertices[j].firstarc; p; p=p->nextarc)

{

k=p->adjvex;dut=p->info;

ee = ve[j]; el = vl[k]-dut;

tag = (ee==el) ? '*' : ' ';

printf(j, k, dut, ee, el, tag); // 输出关键活动

}

return OK;

} // CriticalPath

3.系统测试

3.1图形化界面展示图及所求解的顶点和路径

给定一个有向无环图,其存储形式为如下所示。在此图中,从入度为0的顶点出发,在每一入度为0的顶点可以选择向下走还是向右走,一直走到底层。请找出一条关键路径。输入样例(图):

9

C3;C6;C5;C2;C4;C10;C11.

测试结果如下:

3.2算法的时间复杂度分析。

定义: 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n 的某一函数 T(n)称为这一算法的“时间复杂性”。

当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。

我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。

for (int j=0; j

if (indegree[j]==0) Push(S, j); // 入度为0者进栈

InitStack(T);//建拓扑序列顶点栈T

count = 0;

for(int i=0; i

解:建邻接表:T(n)=O(e)

搜索入度为0的顶点的时间:T(n)=O(n)

拓扑排序:T(n)=O(n+e)

结论

本次课程设计,让我受益匪浅,本次的课程设计主要是对所学过的知识进行实践应用,不仅是巩固了自己所学的知识,而且把知识与实践相结合,使得自己在各个方面都有所提高。这学期我所做的课程设计是拓扑排序与关键路径在实际中的应用,在做本次课程设计的时候,自己也相继遇到了很多问题,很多自己的不足之处也暴露了出来,但是因为知道了自己哪里有不足,所以可以针对不足去弥补,学到的东西更深刻,更透彻,所以本次课程设计使我对算法有了更好的理解。

经过这段时间的上机实践学习,我对C++有了更进一步的认识和了解,要想学好它要重在实践,要通过不断地练习和上机编程才能熟练地掌握它。当然,在上机的同时也要有一定的C++理论知识,这样才能使理论和实践相互促进,在这两方面都有所提高。

与此同时,我也认识到了算法设计的重要性。算法设计为我们提供了很好的结构和算法来实现一些比较难的程序。同时,它还能帮助我们减少程序在时间和空间上的花费。在许多与编程有关的地方都要用到算法设计的知识。

通过本次课程设计,我对拓扑排序和关键路径都有了更深的了解,和更加熟练的应用。虽然过去编写程序也经常用到拓扑排序,但是当时根本就不了解拓扑排序是什么,现在知道拓扑排序是建立在有向无环图的基础上,而关键路径是建立在拓扑排序之上。

在上机实践中,我发现了自己的基础还不是很扎实。有些算法自己还是不能准确地写出来,有的时候还会因为空间分配等问题造成程序错误,但是经过多次实践,一些小的错误自己已经可以很容易解决了,遇到一些较难的问题时,我还是要查看教材和其他的资料来帮助自己解决问题。这种习惯极好地补充了我在程序设计中不足的知识。这使我更深刻地体会到,学各种编译语言,不仅要动脑,更要动手去做。在以后的学习中,我会更加注重实践操作能力的培养,让自己的各方面能力都有所提高。

致谢

这次课程设计能够顺利完成,最感谢的就是我的指导老师。谭老师一直在鼓励我给我信心,给了我们做课程设计的思想和基础,谭老师引导学生,启发学生,鼓励学生。感谢谭老师一直以来的信任与鼓舞,以前我还找不到自己的乐趣,找不到自己的目标,还在每天忧心忡忡,不知道以后怎么办,但是现在我找到了目标,有了信心,也有了坚持下去的勇气,所以我真心的感谢谭老师,无私的鼓励与教诲。同时,我还要感谢那些帮助过我的同学。在调试程序的过程中,有一些错误我很难发现,每次找他们都是耐心帮我讲解帮我解答,这比我看书学到的东西更多,在同学的帮助下,我进步的更快懂的东西也更多。他们的帮助让我受益匪浅。在此,对他们表示诚挚的感谢。

参考文献

[1]郑宗汉,郑晓明.算法设计与分析.清华大学出版社.2005

[2]王晓东.算法设计与分析.清华大学出版社.2003

[3]吕国英等.算法设计与分析(第2版).清华大学出版社.2009

[4]严蔚敏吴伟民.数据结构C++语言版[M].北京:清华大学出版社.2007

[5]维斯.数据结构与算法分析C++语言描述[M].北京:机械工业出版社.2004

[6]周建丽黄志真.用拓扑排序安排课程顺序[J].重庆交通学院学报.1997

[7]刘声田路明.面向对象技术获取AOV网络拓扑序列的算法[J].山东电大学报,2005

数据结构拓扑排序课程设计

课题二拓扑排序 2.1 问题的提出2.1 问题的提出 任务:编写函数实现图的拓扑排序。 程序所实现的功能:建立对应的邻接表,对该图进行拓扑排序,并显示排序 结果。 输入: 顶点数, 边数及各顶点信息(数据格式为整形) 输出: 拓扑排序结果。 2. 2 概要设计 1.拓扑排序是指由某个集合上的一个偏序得到该集合上的一个全序。更直观地讲,一个偏序是自反的、反对称的,用图表示时每个点都有环且只有单向边。拓扑排序的任务是在这个偏序上得到一个全序,即得到一个完成整个项目的各步骤的序列。 2.解决拓扑排序的方法如下: (1)在有向图中选一个没有前驱的顶点且输出之。 (2)从图中删除该顶点和所有以它为尾的弧。 重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。后一种情况则说明有向图中存在环。具体的算法实现参照源程序。 3.构造邻接表图:typedef struct{ AdjList vertices; int vexnum,arcnum; }Graph;//邻接表图 4.为了避免重复检测入度为零的顶点,源程序中设了一个栈,暂存所有入度为零的顶点:typedef struct stack{ int *base; int *top; int stacksize;

}sqstack;//栈的结构,存储图的顶点序号 2.3 流程图2.根据算法思想,画流程图如下:

2.4 源代码 //采用尾插法创的邻接图 #include using namespace std; const int MAX=20; const int STACK_INIT_SIZE=100; const int ERROR=0; typedef struct stack{ int *base; int *top; int stacksize; }sqstack;//栈的结构,存储图的顶点序号 typedef struct lnode { int adjvex; struct lnode *next; }ArcNode;//弧结点 typedef struct node2 { char data; ArcNode *fristarc; }VNode,AdjList[MAX];//顶点数组,fristarc指向与顶点邻接的第一条弧 typedef struct{ AdjList vertices; int vexnum,arcnum; }Graph;//邻接表图 void Initstack(sqstack &s) { s.base=new int;

拓扑排序

拓扑排序 摘要 拓扑排序是求解网络问题所需的主要算法。管理技术如计划评审技术和关键路径法都应用这一算法。通常,软件开发、施工过程、生产流程、程序流程等都可作为一个工程。一个工程可分成若干子工程,子工程常称为活动。活动的执行常常伴随着某些先决条件,一些活动必须先于另一活动被完成。利用有向图可以把这种领先关系清楚地表示出来。而有向图的存储可以用邻接表和逆邻接表做存储结构来实现。最后用拓扑排序表示出来就可以了。拓扑排序有两种,一种是无前趋的顶点优先算法,一种是无后继的顶点优先算法,后一种的排序也就是逆拓扑排序。 关键词:拓扑排序;逆拓扑排序;有向图;邻接表;逆邻接表

THE OPERATOR ORDERING PROBLEM IN QUANTUM HAMITONIAN FOR SOME CONSTRAINT SYSTEMS ABSTRACT Topological sort is the main method to solve network problems. Management techniques such as PERT and critical path method is the application of this algorithm. Typically, software development, the construction process, production processes, procedures, processes, etc. can be used as a project. A project can be divided into several sub-projects, often referred to as sub-project activities. The implementation of activities often associated with certain preconditions, some of the activities must be completed before another activity. Use has lead to the relationship of this figure can be expressed clearly. While storage can be used to map the inverse adjacency list and adjacency table to do storage structures. Finally, topological sort that out on it. Topological sort, there are two, one is the predecessor of the vertex without first algorithm, a successor of the vertex is no priority algorithm, the latter sort is the inverse topological sort. Key words:topological sort; inverse topological; have to figure; adjlink; inverse adjlink

关键性技能训练法重点总结

孤独症干预的关键性技能训练法的总结 一、语言学习动力 (一)孤独症儿童语言发育迟缓在语形语义和语用三个方面的言语发展落后、语义学习障碍语用障碍句法结构障碍等,孤独症儿童主动性语言训练最好从表达要求的语言开始,所以在看以前首先要做好喜好物的评估,激起孩子说话的需要,还要选择功能性的词汇,作为第一批的语言目标。 (二)教导者必须熟练掌握prt教育体系中的七大关键性技能。第一点,要遵循孩子的兴趣,不仅要做好教导前孩子兴趣,喜好的调查,还要在教导过程中恰到好处的运用孩子的兴趣和喜好。在遵循孩子兴趣的前提下,教导者首先要获得孩子的注意。可以列一个表格,内容是让你自己知道怎样才能获得孩子的注意。第二点,要提供明确的机会,教导者的指令,问题,要求,必须尽可能的清晰,明确,音量适中,用词准确,符合孩子的能力水平,与当前的任务有关联等。此外教导者在再次提供机会时应该使用统一的语言和条件。要给孩子提供渐进性辅助的时候例外。第三点,教导者在与孩子互动时,必须进行新旧技能的交替,重要的是将旧任务和新任务交替,和提供更多引起孩子兴趣的新任务。第四点,尊重孩子的选择但注意分享控制权。遵循着孩子的引导和与孩子轮流是分享控制的两种方法,如果儿童能够有一些控制的机会,反应将提高,学习更快。第五点,要有条件的强化,必须以孩子的行为为条件。第六点,自然性强化,指强化必须与活动或任务有着直接的联系。第七点,强化孩子的努力,对于来自指导者的问题指令或者机会,孩子做出任何一次相关的努力都应该给予强化,尽管一个努力不一定是正确的,但它必须是合理的,合理的意味着孩子必须是专心于任务,努力必须是与任务有关的。 (三)创造语言机会 第一点:时间延迟法 如果孩子已经有了一点主动表达的意思或已经学习过表达所用句,在机会呈现时,可以等待3秒左右,给孩子一个独立表达的机会,如果5秒之后孩子还不能独立表达,教导者最好能及时辅助,以增进孩子成功的机会,减少孩子的挫败感,维持语言学习动力。 第二点:将孩子喜欢的强化物放在他可望而不可即的地方 一定要注意,对孩子喜欢的东西不要一次性的满足她的需要,分次给予,每次提供少量或小片,创造多一些的需求机会更多一些学习的机会。 第三点教导者也可以使用打破常规的方法 打破习惯性的活动程序和日常规律,给孩子一个变化引起孩子的好奇和相应的语言。 第四点考虑研学习机会的语境也非常重要 通过使用熟悉的故事和短语来设计机会引起新的不同的词语,准备语言故事,选择机会进行教学,计划机会,测量计划的有效性。 二、共同注意力 (一)孤独症儿童存在注意的过度选择性问题,注意的分配问题,注意的广度问题,共同注意力的缺乏等问题。 (二)提高注意力的一般方法 首先根据关键性技能训练法的技巧和程序培养孤独症儿童的早起注意力 第一点,动力的调动,遵循孩子的兴趣,让孩子选择活动,把注意力的培养自然的融入到所选择的活动中。 第二点,训练中自然环境的合理设置利用 prt强调在自然环境中教导,关键是教导者要合理安排好孩子的一起生活流程,给孩子提供大量有序的适当性互动,让孩子一个人独处的时间减少,把握好生活中的每一个机会训练孩子关注的习惯。

关键性技能训练法

关键性技能训练法标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

关键性技能训练法: ABA 应用于自闭症儿童教育干预的新方向摘要:应用行为分析对自闭症儿童的干预, 既包括传统的分段回合教法, 也包括具有新特色的关键性技能训练法。目前, 中国国内鲜有对自闭症儿童关键性技能训练法方面的研究 与实践。本文系统地介绍和分析关键性技能训练法的理论特色和主要操作技巧, 并讨论分段回合教法和关键性技能训练法的共性与特色, 以期为相关机构和人员提供参考和借鉴。关键词自闭症应用行为分析关键性技能训练法 1 前言 应用行为分析( Applied Behavior Analysis, 简称ABA) 是一门关于行为规律的社 会科学, 其主旨在于分析并改善具有社会意义的、可观察可测量的、有客观规律的人类行为。在操作的层面, ABA 有不同的干预方法, 其中包括但又不限于单元教法或分段回合教法(Discrete Trial Teaching, 简称DTT) 和关键性技能训练法(Pivotal Response Treatment, 简称PRT )。简单说来, DTT是一种在结构化环境中对有特殊需要孩子进行一对一强化训练的教育方法, 而PRT 是一种以DTT 为基础发展起来的情景化教育系统。ABA 的干预方法广泛应用于对发展性障碍( 如自闭症和智能障碍) 、情绪障碍( 如抑郁症和焦虑症) 和行为障碍( 如注意力缺陷和多动) 等有关问题的教育干预, 其良好效果得到了科学的检验和证实。 自闭症是一种发展性障碍, 其基本症状在儿童出生后至三岁以前出现。根据美国疾病控制中心于2009 年底发布的数据, 自闭症在美国儿童中的发病率已近百分之一。在世界其他

拓扑排序-数据结构实验

拓扑排序 问题描述: 若用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A指向B)。试设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。(课程线性排列,每门课上课时其先修课程已经被安排)。 基本要求: (1)输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。 (2)若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。 需求分析:(测试数据加强版) 1、输入形式: 第一行是是个整数t,表示有t组测试数据; 每一组测试数据的第一行是一个整数n,表示结点数目 接下来的n行是n个顶点的信息 接下来的一行是一个整数m,表示有向边的数目 接下来是m行数据每一行是一条有向边的起止结点信息 2、输出形式: 如果可以实现拓扑排序,输出其得到的合法线性序列 否则,输出“Input Error!”;

3、功能描述: 帮助判断当前的课程是否可以安排得当; 如果得当,输出一个合法的修读顺序; 4、样例输入输出: 输入: 2 5 Math English Physics Chinese Music 5 Math English Math Physics English Chinese Physic Chinese Chinese Music 5 Math English Physics Chinese Music 4 Math English Math Physics English Chinese Physic Chinese 输出: Input Error! Math English Physics Chinese Music 抽象数据结构类型描述(ADT): 采用邻接表的方式来存储数据: 抽象数据类型描述:

实验技能训练

中学物理实验技能训练 中学物理实验技能训练是系统研究中学物理实验教学的规律和实践的技能训练课。通过物理实验教学,使师范生熟悉中学物理实验的常用仪器和基本实验技术,并选择一些典型的演示实验和学生分组实验进行分析、研究和训练,进而培养改进和设计中学物理实验的初步能力。 一、教学目标 1. 对中学物理实验中涉及的常用仪器、基本技术、基本技能,结合具体的实验内容进行综合训练,使师范生形成一定的实验能力。 2. 对一些重要的、有一定难度的中学物理演示实验和学生分组实验进行研究和探讨,找出成功的关键和解决方案。 3. 对中学物理实验方案的设计、实验仪器的选择和创新进行研究和探讨。 4. 使师范生在进行实验训练的同时,考虑、研究中学物理实验的特点,同时配合讲解技能做演示实验,怎样指导中学生做实验,使师范生形成一定的实验教学能力。 5. 自制教具,利用日常生活常见物品设计、制作实验器材,并用于中学物理教学中。 6. 通过实验技能训练,在培养实验技能的同时,牢固树立中学物理教学必须以实验为基础的教学观念。 二、实验要求 实验训练形式分为演示实验、自制教具、DIS实验三种方式。以下对各实验方式的要求及内容进行详细说明。 A. 演示实验: (一) 每一实验小组进行演示实验时应包括以下教学环节: 1、实验原理的阐述、实验仪器设备功能用途的介绍; 2、实验设备调试、布置与线路连接的说明; 3、实验的操作演示与讲解技能; 4、实验的结论及问题分析。 (二)演示过程中对实验教学技能的基本要求包括: 1、合理布局实验仪器的技能(包括电路的连接);

(1)实验仪器的布局要便于操作; (2)实验仪器的布局要便于观察; (3)实验仪器的布局要规范、安全、整齐、美观。 2、演示实验的操作技能 (1)严格遵守实验操作规程; (2)实验操作要准确、熟练; (3)实验演示的现象要明显、直观。 3、演示实验的讲解技能 (1)演示实验的讲解要准确、精练、规范; (2)讲解的时机要符合教学的需要(边讲边做、先讲后做、先做后讲等); (3)讲解的语言要有启发性和逻辑性。 (三) 实验项目及要求 实验一打点计时器的使用及力学实验研究 器材:打点计时器、小车、附有定滑轮的长木板、小桶、细绳、砂子、学生天平、砝码、低压电源、米尺等。 内容: 1. 验证质量一定时,加速度与作用力成正比;作用力一定时,加速度与质量 成反比。 2. 研究该实验对培养学生实验能力所起的作用及如何指导中学生做好这一 实验。 3. 掌握打点计时器研究匀变速运动的方法。 4. 研究误差产生的原因和做好本实验的关键。 实验二奈的溶解和凝固 器材:试管、烧杯、支架、温度计、石棉网、秒表、奈、硫代硫酸钠、火柴、镊子等。 内容: 1.研究本实验成功的关键及改进方法。 2.研究本实验对培养学生实验能力所起的作用。 实验三光学演示实验的研究 器材:光具盘、光学实验组合教具箱、激光器、光具座、可调狭缝、双缝及支架等。 内容: 1.掌握显示光路的几种方法。 2.了解光源的调节方法。

拓扑排序课程设计报告

沈阳航空航天大学 课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:拓扑排序算法 院(系):计算机学院 专业:计算机科学与技术(嵌入式系统方向) 班级:14010105班 学号:2011040101221 姓名:王芃然 指导教师:丁一军

目录 1 课程设计介绍 (1) 1.1课程设计内容 (1) 1.2课程设计要求 (1) 2 课程设计原理 (2) 2.1课设题目粗略分析 (2) 2.2原理图介绍 (2) 2.2.1 功能模块图 (2) 2.2.2 流程图分析 (3) 3 数据结构分析 (7) 3.1存储结构 (7) 3.2算法描述 (7) 4 调试与分析 (12) 4.1调试过程 (12) 4.2程序执行过程 (12) 参考文献 (14) 附录(关键部分程序清单) (15)

1 课程设计介绍 1.1 课程设计内容 由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。若在图一的有向图上人为的加一个表示V2<=V3的弧(“<=”表示V2领先于V3)则图一表示的亦为全序且这个全序称为拓扑有序,而由偏序定义得到拓扑有序的操作便是拓扑排序。在AOV网中为了更好地完成工程,必须满足活动之间先后关系,需要将各活动排一个先后次序即为拓扑排序。编写算法建立有向无环图,主要功能如下: 1.能够求解该有向无环图的拓扑排序并输出出来; 2.拓扑排序应该能处理出现环的情况; 3.顶点信息要有几种情况可以选择。 1.2 课程设计要求 1.输出拓扑排序数据外,还要输出邻接表数据; 2.参考相应的资料,独立完成课程设计任务; 3.交规范课程设计报告和软件代码。

图的最短路径、拓扑排序和关键路径

数据结构课程辅导 ---图的最短路径、拓扑排序和关键路径 一、最短路径 由图的概念可知,在一个图中,若从一顶点到另一顶点存在着一条路径(这里只讨论无回路的简单路径),则称该路径长度为该路径上所经过的边的数目,它也等于该路径上的顶点数减1。由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同,即路径长度不同,我们把路径长度最短(即经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短路径长度或最短距离。 上面所述的图的最短路径问题只是对无权图而言的,若图是带权图,则把从一个顶点i到图中其余任一个顶点j的一条路径上所经过边的权值之和定义为该路径的带权路径长度,从vi到vj可能不止一条路径,我们把 带权路径长度最短(即其值最小)的那条路径也称作最短路径,其权值也称作最短路径长度或最短距离。 例如,在图3-1中,从v0到v4共有三条路径:{0,4},{0,1,3,4}和 {0,1,2,4},其带权路径长度分别为30,23和38,可知最短路径为{0,1,3,4},最短距离为23。 图3-1 带权图和对应的邻接矩阵 实际上,这两类最短路径问题可合并为一类,这只要把无权图上的每条边标上数值为1的权就归属于有权图了,所以在以后的讨论中,若不特别指明,均认为是求带权图的最短路径问题。 求图的最短路径问题用途很广。例如,若用一个图表示城市之间的运输网,图的顶点代表城市,图上的边表示两端点对应城市之间存在着运输线,边上的权表示该运输线上的运输时间或单位重量的运费,考虑到两城市间的海拔高度不同,流水方向不同等因素,将造成来回运输时间或运费的不同,所以这种图通常是一个

数据结构拓扑排序实验报告

拓扑排序 [基本要求] 用邻接表建立一个有向图的存储结构。利用拓扑排序算法输出该图的拓扑排序序列。 [编程思路] 首先图的创建,采用邻接表建立,逆向插入到单链表中,特别注意有向是不需要对称插入结点,且要把输入的字符在顶点数组中定位(LocateVex(Graph G,char *name),以便后来的遍历操作,几乎和图的创建一样,图的顶点定义时加入int indegree,关键在于indegree 的计算,而最好的就是在创建的时候就算出入度,(没有采用书上的indegree【】数组的方法,那样会增加一个indegree算法,而是在创建的时候假如一句计数的代码(G.vertices[j].indegree)++;)最后调用拓扑排序的算法,得出拓扑序列。 [程序代码] 头文件: #define MAX_VERTEX_NUM 30 #define STACKSIZE 30 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int InfoType; typedef int Status; typedef int SElemType; /* 定义弧的结构*/ typedef struct ArcNode{ int adjvex; /*该边所指向的顶点的位置*/ struct ArcNode *nextarc; /*指向下一条边的指针*/ InfoType info; /*该弧相关信息的指针*/

学科教学技能训练

体育学科教学技能训练知识的整理 备场地器材: 大部分体育教学都离不开场地器材。体育课场地器材的有无、数量的多少、质量的优劣、布局是否有技巧等对体育教学效果都起着至关重要的作用。 作为体育教师,上课前要根据本校的实际情况、学生人数和教学内容,有针对性地做好场地器材的准备工作,达到安全、高效、美观的要求。 备教材: 教师在备教材时,需要着重理解三个问题: 1.如何钻研教材? 2.如何确定教材的重点及难点和每次课的重点及难点? 3.如何充分挖掘教材中隐含的德育资源? 备天气: 本专题讨论了如何根据季节气候变化的基本规律,结合本地区域气候的特点,制订适宜的应对天气气候状况的教学实施计划。 鉴于我国的国情,大多数老师在很长一段时间内,体育课还不得不在室外进行。因此,要求我们课前一定要注意季节气候和本地的天气变化情况,提前做好预案,确保教学计划的顺利实施 备学生: 原因是:体育课是以室外的身体活动为主,需要较大的场地和大量 的器材,教学组织更为多变和复杂等。如果这样的课程不了解学情,一 旦出现问题,后果不仅仅是学生学不会,严重的甚至可能会出现伤害事 故,给教师和学生的心理都蒙上阴影。因此,体育教师上课前一定要做 好学情分析。 本专题从了解学生的基本情况、培养体育骨干、预计适宜的运动负 荷这三个方面展开讨论,引导教师做好体育课前的学情分析。 体育教师要特别做好“备学生”的工作,了解学生的基本情况、培养好体育骨干、设计合理的运动负荷,确保体育课的安全有效,避免出现一些意想不到的事故。 本专题以美国著名的教育心理学家奥苏泊尔的一句话作为结束语:“假如让我把全部教育心理学仅仅归纳为一条原理的话,那么我将一言以蔽之:影响学习

有向图拓扑排序算法的实现

数据结构课程设计 设计说明书 有向图拓扑排序算法的实现 学生姓名 学号 班级 成绩 指导教师魏佳 计算机科学与技术系 2010年2月22日

数据结构课程设计评阅书 注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。

课程设计任务书 2010—2011学年第二学期 专业:信息管理与信息系统学号:姓名: 课程设计名称:数据结构课程设计 设计题目:有向图拓扑排序算法的实现 完成期限:自2011 年 2 月22 日至2011 年 3 月 4 日共 2 周 设计内容: 用C/C++编写一个程序实现有向图的建立和排序。要求建立有向图的存储结构,从键盘输入一个有向图,程序能够自动进行拓扑排序。 设计要求: 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。 2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架; 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚; 5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析; 7)编写课程设计报告; 以上要求中前三个阶段的任务完成后,先将设计说明数的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。 指导教师(签字):教研室主任(签字): 批准日期:2011年2月21 日

康复治疗专业人员技能竞赛理论学习试题6

康复治疗专业人员技能竞赛理论学习 试题六 一、以下每一道考题下面有A、B、C、D、E五个备选答案。请从中选择一个最佳答案,并在答题卡上将相应题号的相应字母所属的方框涂黑。 1.瘫痪肢体被动运动时错误的方法为() A.肢体充分放松 B.运动越快越好 C.固定近端关节 D.避免冲击性运动 E.多方向运动 2.ADL是指()。 A.躯体功能 B.日常生活活动 C.认知活动 D.交流活动 E.智力评价 3.周围神经损伤后的早期康复治疗项目不包括()。 A.肢体放在功能位 B.预防肢体挛缩 C.手法按摩 D.被动运动 E.大强度抗阻力训练 4.盆腔炎急性期超短波的最佳治疗剂量为()。 A.无热量 B.无热量~微热量 C.微热量 D.微热量~温热量 E.温热量 5.紫外线最小红斑量(MED)或生物剂量是指()。 A.引起最小面积红斑的剂量 B.引起最弱红斑的剂量 C.治疗所需的最小剂量 D.治疗所允许的最小剂量 E.最安全的剂量 6.站立训练的适应证为()。 A.骨折未愈合 B.急性期关节疼痛

C.骨关节肿瘤 D.关节脱位 E.长期卧床 7.作业疗法是指对于身体上、精神上、发育上有功能障碍患者()。 A.应用有目的的、选择性的作业活动,进行治疗和训练 B.应用被动及主动运动,进行治疗和训练 C.应用针对手和上肢的手法技术,进行治疗和训练 D.应用布置家庭作业的形式,进行治疗和训练 E.职业前的技能训练 8.脊柱牵引治疗的禁忌证是()。 A.颈背痛 B.腰腿痛 C.脊柱结核 D.椎间盘突出症 E.脊柱小关节紊乱 9.日常生活活动能力评定的主要内容是()。 A.运动能力 B.关节活动范围 C.生活自理能力和依赖程度 D.生活质量 E.肌力 10.衡量有氧训练的运动强度较常用的简便指标是()。 A.体重 B.睡眠 C.靶心率 D.脉压差 E.食欲 11.关于偏瘫患者穿衣动作训练中,错误的是?() A.先进行上下肢功能训练 B.一般先穿健侧袖,再穿患侧袖 C.上衣不用扣子,改用拉链或尼龙搭扣 D.不穿系带鞋,改穿船形鞋 E.裤子不用腰带,改用松紧带 12.主动关节活动度训练的目的不包括()。 A.改善心血管功能 B.维持关节的活动范围 C.消除骨关节肿瘤 D.增强关节周围肌力

关键性技能训练法

关键性技能训练法: ABA 应用于自闭症儿童教育干预的新方向 摘要:应用行为分析对自闭症儿童的干预, 既包括传统的分段回合教法, 也包括具有新特色的关键性技能训练法。目前, 中国国内鲜有对自闭症儿童关键性技能训练法方面的研究 与实践。本文系统地介绍和分析关键性技能训练法的理论特色和主要操作技巧, 并讨论分 段回合教法和关键性技能训练法的共性与特色, 以期为相关机构和人员提供参考和借鉴。 关键词自闭症应用行为分析关键性技能训练法 1 前言 应用行为分析( Applied Behavior Analysis, 简称ABA) 是一门关于行为规律的社会科学, 其主旨在于分析并改善具有社会意义的、可观察可测量的、有客观规律的人类行为。在操作的层面, ABA 有不同的干预方法, 其中包括但又不限于单元教法或分段回合教法(Discrete Trial Teaching, 简称DTT) 和关键性技能训练法(Pivotal Response Treatment, 简称PRT )。简单说来, DTT是一种在结构化环境中对有特殊需要孩子进行一对一强化训练的教育方法, 而PRT 是一种以DTT 为基础发展起来的情景化教育系统。ABA 的干预方法广泛应用于对发展性障碍( 如自闭症和智能障碍) 、情绪障碍( 如抑郁症和焦虑症) 和行为障碍( 如注意力缺陷和多动) 等有关问题的教育干预, 其良好效果得到了科学的检验和证实。 自闭症是一种发展性障碍, 其基本症状在儿童出生后至三岁以前出现。根据美国疾病控制中心于2009 年底发布的数据, 自闭症在美国儿童中的发病率已近百 分之一。在世界其他国家和地区, 自闭症出现率也有上升的趋势。迄今为止, 任何一种干预方法,最多也只是对50%左右的儿童有明显的治疗效果。例如, 自闭症儿童教育干预中最常用的以ABA 为理论基础的DTT, 在其创始人美国加州大学洛杉矶校区洛瓦思( Ivar Lovaas) 教授的亲自督导下, 也只是使得47%的接受干预的自闭症儿童的智商上升到正常水平, 并在其他方面接近于普通儿童。PRT 是一种源自DTT 但又不同于DTT 的对自闭症儿童教育干预的新方法。自二十世纪七十年代以来,以加州大学心理学教授凯戈尔( Robert Koegel) 等人为代

拓扑排序课程设计报告

拓扑排序 一问题描述 本次课程设计题目是:编写函数实现图的拓扑排序 二概要设计 1.算法中用到的所有各种数据类型的定义 在该程序中用邻接表作为图的存储结构。首先,定义表结点和头结点的结构类型,然后定义图的结构类型。创建图用邻接表存储的函数,其中根据要求输入图的顶点和边数,并根据要求设定每条边的起始位置,构建邻接表依次将顶点插入到邻接表中。 拓扑排序的函数在该函数中首先要对各顶点求入度,其中要用到求入度的函数,为了避免重复检测入度为零的顶点,设置一个辅助栈,因此要定义顺序栈类型,以及栈的函数:入栈,出栈,判断栈是否为空。 2.各程序模块之间的层次调用关系 第一部分,void CreatGraph(ALGraph *G)函数构建图,用邻接表存储。这个函数没有调用函数。 第二部分,void TopologicalSort(ALGraph *G)输出拓扑排序函数,这个函数首先调用FindInDegree(G,indegree)对各顶点求入度indegree[0……vernum-1];然后设置了一个辅助栈,调用InitStack(&S)初始化栈,在调用Push(&S,i)入度为0者进栈,while(!StackEmpty(&S))栈不为空时,调用Pop(&sS,&n)输出栈中顶点并将以该顶点为起点的边删除,入度indegree[k]--,当输出某一入度为0的顶点时,便将它从栈中删除。 第三部分,主函数,先后调用void CreatGraph(ALGraph *G)函数构建图、void TopologicalSort(ALGraph *G)函数输出拓扑排序实现整个程序。 3.设计的主程序流程

拓扑排序算法

图的拓扑排序操作 一、实验内容 题目:实现下图的拓扑排序。 5 二、目的与要求 (一)目的 1、了解拓扑排序的方法及其在工程建设中的实际意义。 2、掌握拓扑排序的算法,了解拓扑排序的有向图的数据结构。 (二)要求 用C语言编写程序,实现图的拓扑排序操作。 三、设计思想 首先对有向图,我们采取邻接表作为数据结构。且将表头指针改为头结点,其数据域存放该结点的入度,入度设为零的结点即没有前趋。 在建立邻接表输入之前,表头向量的每个结点的初始状态为数据域VEX(入度)为零,指针域NXET为空,每输入一条弧< J, K > 建立链表的一个结点,同时令k 的入度加1,因此在输入结束时,表头的两个域分别表示顶点的入度和指向链表的第一个结点指针。 在拓扑排序的过程之中,输入入度为零(即没有前趋)的顶点,同时将该顶点的直接后继的入度减1。 (1)、查邻接表中入度为零的顶点,并进栈。 (2)、当栈为空时,进行拓扑排序。 (a)、退栈,输出栈顶元素V。 (b)、在邻接表中查找Vj的直接后继Vk,将Vk的入度减一,并令入度减至零的顶点进栈。 (3)、若栈空时输出的顶点数不是N个则说明有向回路,否则拓扑排序结束。为建立存放入度为零的顶点的栈,不需要另分配存储单元,即可借入入度为零的数据域。一方面,入度为零的顶点序号即为表头结点的序号,另一方面,借用入度为零的数据域存放带链栈的指针域(下一个入度的顶点号)。

四、具体算法设计 #include #include #include #include #include using namespace std; #define MAX 9999 stackmystack; int indegree[MAX]; struct node { int adjvex; node* next; }adj[MAX]; int Create(node adj[],int n,int m)//邻接表建表函数,n代表定点数,m代表边数{ int i; node *p; for(i=0;i<=n-1;i++) { adj[i].adjvex=i; adj[i].next=NULL; } for(i=0;i<=m-1;i++) { cout<<"请输入第"<>u>>v; p=new node; p->adjvex=v; p->next=adj[u].next; adj[u].next=p; } return 1; } void print(int n)//邻接表打印函数 { int i; node *p; for(i=0;i<=n-1;i++) { p=&adj[i]; while(p!=NULL) { cout<adjvex<<' '; p=p->next; } cout<

C++实现图的拓扑排序

#include #include #include usingnamespace std; constint MAX=100; struct ArcNode { int adjVNode; //节点编号 ArcNode *nextArcNode; // 指向邻接到同一节点的其他节点 ArcNode(){nextArcNode=NULL;} }; struct VNode { int num; //节点编号 ArcNode *firstArcNode; //指向该节点邻接的节点 VNode(){firstArcNode=NULL;} }; struct Graph { int vexnum; //图点数 int arcnum; //图边数 VNode vertices[MAX]; //图的邻接表,指针数组 }; bool topSort(Graph G, int *indegree,int *TopNum) { int count=0; stack Q; for(int i=0;inextArcNode)

{ indegree[p->adjVNode]--; if(indegree[p->adjVNode]==0) Q.push(p->adjVNode); } } if(count!=G.vexnum) returnfalse; returntrue; } int main() { Graph G; ifstream fin("in.txt"); cout<<"输入节点数和边数: "; cin >> G.vexnum >> G.arcnum; //G.vertices=new VNode[G.vexnum]; for(int i=0;i> u >> v; cin >> u >> v; p=new ArcNode(); p->adjVNode=v-1; p->nextArcNode=G.vertices[u-1].firstArcNode; G.vertices[u-1].firstArcNode=p; indegree[v-1]++; //cout << endl; } int *TopNum=newint[G.vexnum]; if(topSort(G,indegree,TopNum)) {

拓扑排序(算法与数据结构课程设计)

拓扑排序 一、问题描述 在AOV网中为了更好地完成工程,必须满足活动之间先后关系,需要将各活动排一个先后次序即为拓扑排序。拓扑排序可以应用于教学计划的安排,根据课程之间的依赖关系,制定课程安排计划。按照用户输入的课程数,课程间的先后关系数目以及课程间两两间的先后关系,程序执行后会给出符合拓扑排序的课程安排计划。 二、基本要求 1、选择合适的存储结构,建立有向无环图,并输出该图; 2、实现拓扑排序算法; 3、运用拓扑排序实现对教学计划安排的检验。 三、算法思想 1、采用邻接表存储结构实现有向图;有向图需通过顶点数、弧数、顶点以及弧等信息建立。 2、拓扑排序算法void TopologicalSort(ALGraph G) 中,先输出入度为零的顶点,而后输出新的入度为零的顶点,此操作可利用栈或队列实现。考虑到教学计划安排的实际情况,一般先学基础课(入度为零),再学专业课(入度不为零),与队列先进先出的特点相符,故采用队列实现。 3、拓扑排序算法void TopologicalSort(ALGraph G),大体思想为: 1)遍历有向图各顶点的入度,将所有入度为零的顶点入队列; 2)队列非空时,输出一个顶点,并对输出的顶点数计数; 3)该顶点的所有邻接点入度减一,若减一后入度为零则入队列; 4)重复2)、3),直到队列为空,若输出的顶点数与图的顶点数相等则该图可拓扑排序,否则图中有环。 4、要对教学计划安排进行检验,因此编写了检测用户输入的课程序列是否是拓扑序列的算法void TopSortCheck(ALGraph G),大体思想为: 1)用户输入待检测的课程序列,将其存入数组; 2)检查课程序列下一个元素是否是图中的顶点(课程),是则执行3),否则输出“课程XX不存在”并跳出; 3)判断该顶点的入度是否为零,是则执行4),否则输出“入度不为零”并跳出; 4)该顶点的所有邻接点入度减一; 5)重复2)、3)、4)直到课程序列中所有元素均被遍历,则该序列是拓扑序列,否则不是拓扑序列。

拓 扑 路 径 详 细 原 理

《大话数据结构》笔记——第7章图(三) 文章目录7.8 拓扑排序7.8.1 拓扑排序介绍7.8.2 拓扑排序算法7.9 关键路径7.9.1 关键路径算法原理7.9.2 关键路径算法7.10 回顾总结 7.8 拓扑排序 说了两个有环的图应用,现在我们来谈谈无环的图应用。无环,即是图中没有回路的意思。 7.8.1 拓扑排序介绍 在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为 AOV 网( Activity On Vertex Network )。 AOV 网中的弧表示活动之间存在的某种制约关系。比如演职人员确定了,场地也联系好了,才可以开始进场拍摄。 另外就是 AOV 网中不能存在回路。刚才已经举了例子,让某个活动的开始要以自己完成作为先决条件,显然是不可以的。 设 G=(V,E) 是一个具有 n 个顶点的有向图,V 中的顶点序列v1,v2, … ,vn ,满足若从顶点 vi 到 vj 有一条路径,则在顶点序列中顶点 vi 必在顶点 vj 之前。则我们称这样的顶点序列为一个拓扑序列。 上图这样的 AOV 网的拓扑序列不止一条。序列 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 是一条拓扑序列,v0 v1

v4 v3 v2 v7 v6 v5 v8 v10 v9 v12 v11 v14 v13 v15 v16 也是一条拓扑序列。 所谓拓扑排序,其实就是对一个有向图构造拓扑序列的过程。构造时会有两个结果,如果此网的全部顶点都被输出,则说明它是不存在环(回路)的 AOV 网;如果输出顶点数少了,哪怕是少了一个,也说明这个网存在环(回路),不是 AOV 网。 一个不存在回路的 AOV 网,我们可以将它应用在各种各样的工程或项目的流程图中,满足各种应用场景的需要,所以实现拓扑排序的算法就很有价值了。 7.8.2 拓扑排序算法 对 AOV 网进行拓扑排序的基本思路是:从 AOV 网中选择一个入度为 0 的顶点输出,然后删去此顶点,并删除以此顶点为尾的弧,继续重复此步骤,直到输出全部顶点或者 AOV 网中不存在入度为 0 的顶点为止。 首先我们需要确定一下这个图需要使用的数据结构。前面求最小生成树和最短路径时,我们用的都是邻接矩阵,但由于拓扑排序的过程中,需要删除顶点,显然用邻接表会更加方便。因此我们需要为 AOV 网建立一个邻接表。考虑到算法过程中始终要查找入度为 0 的顶点,我们在原来顶点表结点结构中,增加一个入度域 in ,结构如表7-8-1 所示,其中 in 就是入度的数字。 因此对于图 7-8-2 的第一幅图 AOV 网,我们可以得到如第二幅图的邻接表数据结构。

拓扑排序

目录 一、系统开发的背景 (1) (一)问题描述 (1) (二)任务要求 (1) (三)测试数据 (2) (四)系统模块结构设计 (2) 三、系统的设计与实现 (3) (一)系统流程图: (3) (二)主函数模块 (4) (三)图存储结构的建立 (4) 四、系统测试 (8) (一)测试界面选择的实现 (8) (二)测试拓扑排序的实现 (8) (三)测试关键活动的实现 (8) 五、总结 (9)

六、附件(代码、部分图表) (10)

拓扑排序 一、系统开发的背景 为了在科技不断进步的今天能够紧跟着时代的步伐,人们开始不断地追求方便和快捷的生活方式,在这个新鲜的时代,越来越多的新鲜事物层出不穷,为人们提供着各种方便和便利,为了更好地适应和接受这个时刻进步着的社会,我们要努力赶上。在实际工作中,经常要使用一个有向图来表示工程的施工流程或者产品生产的流程图。也就是说,一个大的工程经常被划分为若干个较小的子工程,这些子工程称为“活动”(Activity)。当这些子工程全部完成时,整个工程也就完成了。并且更要关心整个工程完成的最短时间,这就是有向权图的另一个重要应用——工程进度的关键路径问题。用图的邻接表(出边表)表示方法,实现拓扑排序和关键路径的求解过程。 二、系统分析与设计 (一)问题描述 拓扑排序可判断AOV网络中是否存在回路,使得所有活动可排成一个线性序列,使用每个活动的所有前驱活动都排在该活动的前面。 关键路径的工期决定了整个项目的工期。任何关键路径上的终端元素的延迟将直接影响项目的预期完成时间(例如在关键路径上没有浮动时间)。 (二)任务要求 构建AOV网络,并输出其拓扑序列结果,输出该图的关键路径和关键活动,存储结构自行选择。

相关文档
最新文档