关键路径、拓扑排序的求解演示过程

关键路径、拓扑排序的求解演示过程
关键路径、拓扑排序的求解演示过程

目录

一、题目概述(内容及要求) (2)

二、功能分析 (2)

三、设计 (4)

四、运行与测试 (8)

五、总结 (11)

参考文献 (11)

一、题目概述(内容及要求)

1、什么是拓扑排序?

简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称

之为拓扑排序。

如何进行拓扑排序?解决的方法很简单:

(1)在有向图中选一个没有前驱的顶点且输入之。

(2)从图中删除该结点和所有以它为尾的弧。

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

为止。后一种情况则说明有向图中存在环。

AOE-网是一个带权的有向无环图,其中,顶点表示事件,弧表示活动,权

表示活动持续的时间。在AOE-网络中有些活动顺序进行,有些活动并行进行。由

于整个工程只有一个开始点和一个完成点,故在正常情况下(无环),网中只有

一个入度为零的点(称作源点)和一个出度为零的点(叫做汇点)。

由于AOE-网中有些活动可以并行的进行,所以完成工程的最短时间是从开

始点到完成点的最长路径长度(这里所说的路径长度是指路径上个活动持续时间

之和,不是路径上弧的数目)。路径长度最长的路径叫做关键路径。

2、求关键路径的算法:

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

(2)从源点v0出发,令ve[0]=0,按拓扑有序求其余各顶点的最早发生时间ve[i](1≤i≤n-1)。如果得到的拓扑有序序列中顶点个数小于网

中顶点数n,则说明网中存在环,不能求关键路径,算法终止;否则

执行步骤(3)。

(3)从汇点v n出发,令vl[n-1]=ve[n-1],按拓扑有序求其余各顶点的最迟发生时间vl[i](n-2≥i≥2);

(4)根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s)。

(5)若某条弧满足条件e(s)=l(s),则为关键路径。

二、功能分析

1.拓扑排序:即判定该图是否为有向无环图,构成一个AOE-网。

2.求关键路径:最短时间的求得,通过求得路径的长度——路径上各活动持续时间之和。其中,路径最长的路径就是关键路径。

拓扑排序和求关键路径的功能图如下:

图一拓扑排序的功能图

图二拓扑排序的功能图

三、设计

图三主要流程图

图四拓扑排序算法流程图

1.程序设计的主界面代码如下:

char ch;

for(;;)

{

do

{

system("cls");

printf("===========================================\n"); printf("| 欢迎进入求关键路径算法程序|\n");

printf("%s","(S)tart开始输入工程数据并求出关键路径\n"); printf("%s","(E)xit退出!\n");

printf("===========================================\n"); printf("%s","请输入选择(S,E):");

scanf("%c",&ch);

ch=toupper(ch);

}

while(ch!='S'&&ch!='E');

switch(ch)

{case'S': seekkeyroot();break;

case'E': return 1;

}

}

2.进行输入数据的代码如下:

int projectnumer,activenumber,totaltime=0;

system("cls");

printf("请输入这个工程个数:");

scanf("%d",&projectnumber);

printf("请输入这个工程和工程之间的边数:");

scanf("%d",&activenumber);

vexnode*

Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));

CreateGraphic(Graphicmap,projectnumber,activenumber);

SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime);

printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);

system("pause");

3.程序的执行部分,即进行拓扑排序找关键路径代码如下:

printf("某项目的开始到结束在图中的工程输入\n");

printf("如:1 3 6 回车表示第一个工程到第三个工程之间的活动用了6个小时\n");

for(int k=0;k

{

scanf("%d %d %d",&begin,&end,&duttem);

p=(edgenode*)malloc(sizeof(edgenode));

p->adjvex=end-1; //将邻接点序号j赋给新结点的邻接点域

p->dut =duttem;

Graphicmap[end-1].id ++; //将入度加1

p->next =Graphicmap[begin-1].link;

Graphicmap[begin-1].link =p; //将新结点插入到顶点vi的边表头部

}

} //求关键路径

int SearchMapPath(vexnode* Graphicmap,int projectnumber,int activenumber,int& totaltime)

{

int i,j,k,m=0;

int front=-1,rear=-1;

int *topologystack=(int*)malloc(projectnumber*sizeof(int));

//用来保存拓扑排列

int *vl=(int*)malloc(projectnumber*sizeof(int)); //用来表示在不推迟整个工程的前提下,VJ允许最迟发生的时间

int *ve=(int*)malloc(projectnumber*sizeof(int)); //用来表示

Vj最早发生时间

int *l=(int*)malloc(activenumber*sizeof(int));

int *e=(int*)malloc(activenumber*sizeof(int)); //表示活动最早开始时间

edgenode *p;

totaltime=0;

for(i=0;i

ve[i]=0;

for(i=0;i

{

if(Graphicmap[i].id==0)

{

topologystack[++rear]=i;

m++;

}

}

while(front!=rear)

{

front++;

j=topologystack[front];

m++;

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

Graphicmap[k].id --;

if(ve[j]+p->dut >ve[k])

ve[k]=ve[j]+p->dut;

if(Graphicmap[k].id ==0)

topologystack[++rear]=k;

p=p->next;

}

}

if(m

{

printf("\n本程序所建立的图有回路不可拓扑排序\n"); printf("将退出本程序\n");

return 0;

}totaltime=ve[projectnumber-1];

for(i=0;i

vl[i]=totaltime;

for(i=projectnumber-2;i>=0;i--)

{

j=topologystack[i];

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

if((vl[k]-p->dut )

vl[j]=vl[k]-p->dut;

p=p->next;

}

}

i=0;

4.程序的输出部分代码如下:

printf("| 起点 | 终点 | 最早开始时间 | 最迟完成时间 | 差值 | 备注 |\n");

for(j=0;j

{

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

e[++i]=ve[j];

l[i]=vl[k]-p->dut;

printf("| %3d | %3d | %7d | %7d | %3d |",Graphicmap[j].projectname+1,Graphicmap[k].projectname

+1,e[i],l[i],l[i]-e[i]);

if(l[i]==e[i])

printf(" 关键活动|");

printf("\n");

p=p->next;

}

}

return 1;

}//寻找关键路径

四、运行与测试

首先,运行程序,无错误,程序运行的主界面如图七所示;其次,参照清华大学出版

社《数据结构(c语言版)》严蔚敏吴伟民编著书中的图,如图五所示建立AOE网输入

相关信息进行程序的测试,程序结果如图八所示,关键路径为如图六所示,图九为无法拓扑

排序求关键路径。

图五AOE网

图六关键路径

图七程序运行主界面

图八运行结果图

图九无法拓扑排序的情况

五、总结

通过对拓扑排序和求关键路径的操作,首先加强了对图的存储结构和图的遍历的进一步的熟悉和应用,在拓扑排序中还让我们去应用以前学习的栈的知识温故的同时也在实践的信得理论。

对图的应用实在生活中应用很广泛,同时图的知识点和算法也是我们这学期学习的精华,例如求关键路径,用到栈,拓扑排序等经典算法,让我们受益匪浅。

参考文献

清华大学出版社数据结构(c语言版)严蔚敏吴伟民编著

附录

源程序代码如下:

#include

#include

#include

#include

#include

typedef struct node//边表结点类型

{

int adjvex;//顶点的序号

int dut; //边上的权值

struct node *next; //指向下一条边的指针

}edgenode;

typedef struct //顶点表结点

{

int projectname; //顶点域

int id; //顶点入度

edgenode *link; //边表头指针

}vexnode;//建立图存储结构

void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber) //projectnumber为工程的节点数,activenumber

{

int begin,end,duttem;

edgenode *p;

for(int i=0;i

{

Graphicmap[i].projectname=i;

Graphicmap[i].id =0;

Graphicmap[i].link =NULL;

}

printf("某项目的开始到结束在图中的工程输入\n");

printf("如:1 3 6 回车表示第一个工程到第三个工程之间的活动用了6个小时\n");

for(int k=0;k

{

scanf("%d %d %d",&begin,&end,&duttem);

p=(edgenode*)malloc(sizeof(edgenode));

p->adjvex=end-1; //将邻接点序号j赋给新结点的邻接点域

p->dut =duttem;

Graphicmap[end-1].id ++; //将入度加1

p->next =Graphicmap[begin-1].link;

Graphicmap[begin-1].link =p; //将新结点插入到顶点vi的边表头部}

} //求关键路径

int SearchMapPath(vexnode* Graphicmap,int projectnumber,int activenumber,int& totaltime)

{

int i,j,k,m=0;

int front=-1,rear=-1;

int *topologystack=(int*)malloc(projectnumber*sizeof(int)); //用来保存拓扑排列

int *vl=(int*)malloc(projectnumber*sizeof(int)); //用来表示在不推迟整个工程的前提下,VJ允许最迟发生的时间

int *ve=(int*)malloc(projectnumber*sizeof(int)); //用来表示Vj最早发生时间

int *l=(int*)malloc(activenumber*sizeof(int));

int *e=(int*)malloc(activenumber*sizeof(int)); //表示活动最早开始时间

edgenode *p;

totaltime=0;

for(i=0;i

ve[i]=0;

for(i=0;i

{

if(Graphicmap[i].id==0)

{

topologystack[++rear]=i;

m++;

}

}

while(front!=rear)

{

front++;

j=topologystack[front];

m++;

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

Graphicmap[k].id --;

if(ve[j]+p->dut >ve[k])

ve[k]=ve[j]+p->dut;

if(Graphicmap[k].id ==0)

topologystack[++rear]=k;

p=p->next;

}

}

if(m

{

printf("\n本程序所建立的图有回路不可拓扑排序\n");

printf("将退出本程序\n");

return 0;

}totaltime=ve[projectnumber-1];

for(i=0;i

vl[i]=totaltime;

for(i=projectnumber-2;i>=0;i--)

{

j=topologystack[i];

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

if((vl[k]-p->dut )

vl[j]=vl[k]-p->dut;

p=p->next;

}

}

i=0;

printf("| 起点 | 终点 | 最早开始时间 | 最迟完成时间 | 差值 | 备注 |\n");

for(j=0;j

{

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex;

e[++i]=ve[j];

l[i]=vl[k]-p->dut;

printf("| %3d | %3d | %7d | %7d | %3d |",Graphicmap[j].projectname+1,Graphicmap[k].projectname

+1,e[i],l[i],l[i]-e[i]);

if(l[i]==e[i])

printf(" 关键活动|");

printf("\n");

p=p->next;

}

}

return 1;

}//寻找关键路径

void seekkeyroot()

{

int projectnumber,activenumber,totaltime=0;

system("cls");

printf("请输入这个工程个数:");

scanf("%d",&projectnumber);

printf("请输入这个工程和工程之间的边数:");

scanf("%d",&activenumber);

vexnode*

Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));

CreateGraphic(Graphicmap,projectnumber,activenumber);

SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime); printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);

system("pause");

}

int main()

{

char ch;

for(;;)

{

do

{

system("cls");

printf("===========================================\n"); printf("| 欢迎进入求关键路径算法程序|\n");

printf("%s","(S)tart开始输入工程数据并求出关键路径\n"); printf("%s","(E)xit退出!\n");

printf("===========================================\n"); printf("%s","请输入选择(S,E):");

scanf("%c",&ch);

ch=toupper(ch);

}

while(ch!='S'&&ch!='E');

switch(ch)

{case'S': seekkeyroot();break; case'E': return 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; /*该弧相关信息的指针*/

拓扑排序

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

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强调在自然环境中教导,关键是教导者要合理安排好孩子的一起生活流程,给孩子提供大量有序的适当性互动,让孩子一个人独处的时间减少,把握好生活中的每一个机会训练孩子关注的习惯。

实验报告

算法与数据结构 实验报告 系(院):计算机科学学院 专业班级:软工11102 姓名:潘香杰 学号: 201104449 班级序号: 18 指导教师:詹泽梅老师 实验时间:2013.6.17 - 2013.6.29 实验地点:4号楼5楼机房

目录 1、课程设计目的...................................... 2、设计任务.......................................... 3、设计方案.......................................... 4、实现过程.......................................... 5、测试.............................................. 6、使用说明.......................................... 7、难点与收获........................................ 8、实现代码.......................................... 9、可改进的地方.....................................

算法与数据结构课程设计是在学完数据结构课程之后的实践教学环节。本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。 一.设计目的 1.提高数据抽象能力。根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。 2.提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。二.设计任务 设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。内容如下: ①创建无向图的邻接表 ②无向图的深度优先遍历 ③无向创建无向图的邻接矩阵 ④无向图的基本操作及应用 ⑤图的广度优先遍历 1.有向图的基本操作及应用 ①创建有向图的邻接矩阵 ②创建有向图的邻接表 ③拓扑排序 2.无向网的基本操作及应用 ①创建无向网的邻接矩阵 ②创建无向网的邻接表 ③求最小生成树 3.有向网的基本操作及应用 ①创建有向网的邻接矩阵 ②创建有向网的邻接表 ③关键路径 ④单源最短路径 三.设计方案 第一步:根据设计任务,设计DOS菜单,菜单运行成果如图所示:

关键性技能训练法

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

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

离散数学实验报告四个实验

《离散数学》 课程设计 学院计算机学院 学生姓名 学号 指导教师 评阅意见

提交日期 2011 年 11 月 25 日 引言 《离散数学》是现代数学的一个重要分支,也是计算机科学与技术,电子信息技术,生物技术等的核心基础课程。它是研究离散量(如整数、有理数、有限字母表等)的数学结构、性质及关系的学问。它一方面充分地描述了计算机科学离散性的特点,为学生进一步学习算法与数据结构、程序设计语言、操作系统、编译原理、电路设计、软件工程与方法学、数据库与信息检索系统、人工智能、网络、计算机图形学等专业课打好数学基础;另一方面,通过学习离散数学课程,学生在获得离散问题建模、离散数学理论、计算机求解方法和技术知识的同时,还可以培养和提高抽象思维能力和严密的逻辑推理能力,为今后爱念族皮及用计算机处理大量的日常事务和科研项目、从事计算机科学和应用打下坚实基础。特别是对于那些从事计算机科学与理论研究的高层次计算机人员来说,离散数学更是必不可少的基础理论工具。 实验一、编程判断一个二元关系的性质(是否具有自反性、反自反性、对称性、反对称性和传递性) 一、前言引语:二元关系是离散数学中重要的内容。因为事物之间总是可以根据需要确定相应的关系。从数学的角度来看,这类联系就是某个集合中元素之

间存在的关系。 二、数学原理:自反、对称、传递关系 设A和B都是已知的集合,R是A到B的一个确定的二元关系,那么集合R 就是A×B的一个合于{()∈A×}的子集合 设R是集合A上的二元关系: 自反关系:对任意的x∈A,都满足<>∈R,则称R是自反的,或称R具有自反性,即R在A上是自反的?(?x)((x∈A)→(<>∈R))=1 对称关系:对任意的∈A,如果<>∈R,那么<>∈R,则称关系R是对称的,或称R具有对称性,即R在A上是对称的? (?x)(?y)((x∈A)∧(y∈A)∧(<>∈R)→(<>∈R))=1 传递关系:对任意的∈A,如果<>∈R且<>∈R,那么<>∈R,则称关系R是传递的,或称R具有传递性,即R在A上是传递的? (?x)(?y)(?z)[(x∈A)∧(y∈A)∧(z ∈A)∧((<>∈R)∧(<>∈R)→(<>∈R))]=1 三、实验原理:通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。 图示:

实验技能训练

中学物理实验技能训练 中学物理实验技能训练是系统研究中学物理实验教学的规律和实践的技能训练课。通过物理实验教学,使师范生熟悉中学物理实验的常用仪器和基本实验技术,并选择一些典型的演示实验和学生分组实验进行分析、研究和训练,进而培养改进和设计中学物理实验的初步能力。 一、教学目标 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.了解光源的调节方法。

学科教学技能训练

体育学科教学技能训练知识的整理 备场地器材: 大部分体育教学都离不开场地器材。体育课场地器材的有无、数量的多少、质量的优劣、布局是否有技巧等对体育教学效果都起着至关重要的作用。 作为体育教师,上课前要根据本校的实际情况、学生人数和教学内容,有针对性地做好场地器材的准备工作,达到安全、高效、美观的要求。 备教材: 教师在备教材时,需要着重理解三个问题: 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的权就归属于有权图了,所以在以后的讨论中,若不特别指明,均认为是求带权图的最短路径问题。 求图的最短路径问题用途很广。例如,若用一个图表示城市之间的运输网,图的顶点代表城市,图上的边表示两端点对应城市之间存在着运输线,边上的权表示该运输线上的运输时间或单位重量的运费,考虑到两城市间的海拔高度不同,流水方向不同等因素,将造成来回运输时间或运费的不同,所以这种图通常是一个

图的应用的实验报告

实验六图的应用及其实现 一、实验目的 1.进一步功固图常用的存储结构。 2.熟练掌握在图的邻接表实现图的基本操作。 3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。 二、实验内容 [题目一]:从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。 测试数据:教材图7.28 [题目二]:从键盘上输入AOE网的顶点和有向边的信息,建立其邻接表存储结构,输出其关键路径和关键路径长度。试设计程序实现上述AOE网类型定义和基本操作,完成上述功能。 测试数据:教材图7.29 三、实验步骤 ㈠、数据结构与核心算法的设计描述 基本数据结构: #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; /* Status 是函数的类型,其值是函数结果状态代码,如OK 等*/ #define INFINITY INT_MAX //定义无穷大∞ #define MAX_VERTEX_NUM 20 typedef int V ertexType; typedef int InfoType; typedef struct ArcNode // 表结点定义 { InfoType info; int adjvex; //邻接点域,存放与V i邻接的点在表头数组中的位置ArcNode *nextarc; //链域,指示依附于vi的下一条边或弧的结点, }ArcNode; typedef struct VNode //表头结点 { int data; //存放顶点信息 struct ArcNode *firstarc; //指示第一个邻接点 }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { //图的结构定义

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

数据结构课程设计 设计说明书 有向图拓扑排序算法的实现 学生姓名 学号 班级 成绩 指导教师魏佳 计算机科学与技术系 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<

拓扑排序课程设计报告

沈阳航空航天大学 课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:拓扑排序算法 院(系):计算机学院 专业:计算机科学与技术(嵌入式系统方向) 班级: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.交规范课程设计报告和软件代码。

数据结构实验报告

《数据结构》实验报告 专业惠普测试 班级142 姓名李斌 学号1408090221 学期 3 指导老师刘勇

成绩: 教师评语: 数据结构上机实验报告 学号:1408090221 姓名:李斌所在系:惠普测试班级:142 实验名称:线性结构基本算法的实现实验日期 实验指导教师刘勇实验机房 ------------------------------------------------------------------------------------------------------

1.实验目的: (1)掌握线性表顺序存储结构的基本操作:插入、删除、查找; (2)掌握线性表链式结构的基本操作:插入、删除、合并等运算; (3)掌握栈和队列基本运算的算法; (4)掌握稀疏矩阵的压缩存储的算法。 2. 实验内容: (1)实现顺序表的创建、插入、删除和查找的操作; (2)实现单链表插入、删除、合并的操作; (3)实现2个有序线性表的合并; (4)利用顺序栈实现括号匹配的算法; (5)实现顺序队列各种基本运算的算法; (6)实现链栈各种基本运算的算法;(选做) (7)实现链队列各种基本运算的算法;(选做) (8)实现稀疏矩阵压缩存储的算法。 3.算法设计(编程思路或流程图或源代码) 内容: 1、顺序表的插入和删除 2、有序单链表的合并 3、数制转换的算法实现 1. //顺序表的插入和删除 #include //#include #include #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1

数据结构实验—图实验报告

精品文档数据结构 实 验 报 告

目的要求 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。 实验内容 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 3.在有向图的邻接表的基础上计算各顶点的度,并输出。 4.以有向图的邻接表为基础实现输出它的拓扑排序序列。 5.采用邻接表存储实现无向图的深度优先递归遍历。 6.采用邻接表存储实现无向图的广度优先遍历。 7.在主函数中设计一个简单的菜单,分别调试上述算法。 源程序: 主程序的头文件:队列 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int QElemType; typedef struct QNode{ //队的操作 QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void InitQueue(LinkQueue &Q){ //初始化队列 Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); //存储分配失败 Q.front ->next =NULL; } int EnQueue(LinkQueue &Q,QElemType e) //插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW); p->data=e;

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)) {

相关文档
最新文档