联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2018-05-09 12:56

图论Projet


目标:

1.在内存中表示出一个有向带权图

2.能检测出是否存在环路

3.计算等级

4.搜索存在的路径(可访问性)

5.验证调度图的属性

6.分别最早和最迟计算日历

7.从约束表创建调度图


编程语言

C / C ++,你的程序必须由你的老师在他的PC上编译。他会告诉你他有什么。你将不得不适应它(使用你自己的电脑和学校的电脑)。


功能实现

文档的这一部分给出了您需要执行的程序的功能描述。 它通常描述了它的体系结构。


要实施的功能可以分为“级别”或“操作模式”。 第一级对应于实现通用图处理。 在这些“级别”中进展越多,则更具体的处理被集成调度图。


注意:

在验证你的工作时,将验证你的程序实际上实现了不同的级别。 例如,将验证您的程序是否能够检查任何图形上是否存在环路,并且能够计算包含多个入口点和/或点的图表上的等级值。输出。


提示(来自之前的说明):例如,您的程序可能会先询问用户所需的“操作模式”或“级别”。

int main(){


cout << "Niveau souhaité" ;

cin >> niveau ;

switch (niveau) {

case 1 : …

case 2 : …


case 4 : …

case 4 : …

} ;

}

或链接4个级别:

int main(){

cout << "Niveau 1" ;

cout << "Niveau 2" ;


cout << "Niveau 3" ;

cout << "Niveau 4" ;


}


等级1“基本”:加载图和一般的处理方


导入:读取“文本”文件中的给定图形,并将其存储在内存中“图形”文件:见附录。

数据结构:文件中描述的图形存储在内存中。您的程序必须能够在内存中存储具有以下属性的任何图形:

有向图并且有值(每个弧都有整数值)。从给定顶点到另一个给定顶点的最多存在1个弧(无多图)。

顶点由数字标识,从'0'开始并且不打破编号:例如对于包含10个顶点的图,从'0'到'9'的顶点。只有在程序执行期间才知道顶点的数量和弧的数量。 您的程序不得在顶点数量,弧线数量或弧线值方面施加限制。


处理完成后,程序不能再访问该文件,并且只能访问内存中图形的表示。


以邻接矩阵和值矩阵的形式显示图形。

通过读取文件从内存中查看内容,不能直接。 建议用屏幕上的空白框替换邻接矩阵的零点,当然如果列对齐正确执行。


检测图中是否存在环路

你的程序必须打印执行的痕迹。 例如,对于入口点消除技术,它必须指示每个步骤消除的顶点。

执行轨迹的内容当然取决于实施的方法。


计算每个顶点的等级

至于环路检测,程序必须显示其执行的痕迹,例如分配给每次迭代的队列。


等级2:验证调度图和计算的日历和边距

除了为第1级提供的发展之外:

验证图形的属性


你的程序需要验证包括:

- 图形只包含一个入口点和一个出口点(对于级别2,我们不需要手动添加输入和输出顶点:图形会被视为 它在输入文件中描述),

- 任何顶点是从入口点访问,

- 所有其他顶点都可以访问出口点,

- 弧的值是正值或零,

- 所有来自顶点的边都具有相同的值,

- 图形不包含电路(使用第1级的代码)。


计算日历和边距


首先计算最早的日历,然后计划以后。 最初认为项目结束日期等于其最早日期,然后重新计算通过最早在项目结束日期的110%确定日期来完成 (可能四舍五入为整数值)。 对于每种情况,程序都会计算边距。


您可以使用您选择的方法计算日历和边距。 某些方法不使用顶点排序,但仍需要始终将此排序计算插入到程序中。



级别3:加载约束表


这里,图形是从一个文本文件中读取的约束表中创建的。 然后在计算日历和边距之前检查调度图的属性。

除了为第1级和第2级开发的内容之外:


约束文件见附件。


任务由整数表示,从'1'开始,并且没有破坏序列(例如,对于10个任务的项目,从'1'到'10')。

约束是在类和TD中接近的类型:X任务只能在Y任务完成时开始。


导入和创建图形


根据在课堂和TD中看到的原理,将约束读取并转换为图形。 有一个在这个阶段没有检查。顶点“开始”和“结束”当然会添加相应的弧线。



等级4:加载约束表并控制图的构造

除了为1到3级开发的内容之外:

导入并构建正确的图形

当加载约束和创建图表时,必须检查它必须遵守的属性。 如果情况并非如此,则认为约束条件不一致。 用户可以选择直接查询修改一个或多个约束。

这种机制可以在全局读取所有约束并完成图形创建之后完成,也可以在分析过程中每次将约束转换为圆弧时完成。


警告:与用户交互时,请仅参考约束条件,而不是图表。

例如,我们不会对用户说“在已经存在的弧(A,B)和(B,C)中添加弧(C,A)时存在问题”,

而是:“考虑到已满足”B需求A“和”C需求B“的约束'A需求C',存在一个问题”。

附件 1 – « 图形»文件结构


你的txt文件应该有以下的结构

第一行    顶点数量

第二行    弧的数量


第三行 到3+ 每行末尾加« 弧的数量 »初始端点,然后末端点,随后是弧的值

例如,如果文件中的内容如下

3

4


1 2 25

1 0 12


2 0 -5

0 1 0



这对应于包含从'0'到'2'编号的3个顶点(连续编号)和4个圆弧(1,2),(1,0),(2,0),(0,1),弧的值分别为25,12,-5和0。


附件 2 –« 约束 »图的结构


你的txt文件应该有以下的结构

第一行

第二行 到2 + « 任务的编号»

剩下的行


任务数量

任务的编号和它的执行时间


x(一个任务的号码),然后是一个数字列表y1 y2 ...,


后跟'0',表示任务#x无法启动

只有当任务完成时。


例如,如果你的约束文件中包括以下内容

5

12


225

34

41

52

10

31 2 0

21 0

51 4 0

40


这对应于包含5个编号从'1'到'5'的任务的项目,其持续时间分别为2,25,4,1和2,并且约束条件为:


任务1和4没有限制,可以随时开始

2只能在1完成时启动

3只能在1和2完成时启动

5只能在1和4完成时启动


相关文章

版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp