设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。

功能要求及说明:(1)对一个描述工程的AOE网,应判断其是否能够顺利进行;(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间;(3)该AOV网要求至少有9个顶点,11条边;并且利用文件对数据进行提取。(4)采用模块化设计。 编译环境:Microsoft Visual Studio 2008语言:C++好的话分花花的来啊!!!!

数据结构部分课程设计题目 题目一:运动会分数据统计问题描述:参加运动会的n个学校编号为1~n,比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。有些项目取前五名,得分依次为6,4,3,2,1;有些项目取前三名,得分依次为4,2,1。写一程序产生各学校的成绩单(包括各校所取得的每项成绩的项目号、成绩、姓名和得分)和团体总分报表(包括校号、男子团体总分、女子团体总分和团体总分)。基本要求:参阅数据结构题集79页题目二:编写一个文本编辑器(记事本) 问题描述:要有文本编辑器的基本功能,如打开、编辑、保存等。基本要求 :1.要制作字符形式的菜单.2.不同的功能使用不同的函数实现.3.对程序进行必要的注释.题目三:停车场管理问题问题描述:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停了n辆汽车,则后来的汽车只能在门外的通道上等候,一旦有车开走,收排在通道上的第一辆车即可开入;当停车场内每辆车要离开时,在它之后进入的车辆必须先退出停车场为其让路,待该辆车开出大门,其他车辆再按原次序进入停车场,每辆停放在停车场的车在它离开停车场时必须按它停留在停车场内的时间长短交纳停车费。试为停车场编写按上述要求进行管理的模拟程序。基本要求:参阅数据结构题集96页。 题目四: 图书管理 问题描述:图书管理基本业务活动包括对一本书的采编入库、清除库存、借阅和归还等等。将上述业务活动借助于计算机系统完成。基本要求:参阅数据结构题集167页 题目五:关键路径问题问题描述:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。基本要求:1、对一个描述工程的AOE网,应判断其是否能够顺利进行。2、若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。 题目六:任意长的整数加法问题描述:设计一个程序实现两个任意长的整数的求和运算。基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000题目七:哈夫曼编码译码器问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。 题目八:交通咨询模拟问题描述:建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市出发到另一个城市所需的最短的时间及路径。题目九:车厢调度问题描述:假设停在铁路调度站(如数据结构教材图3.1(b)所示)入口处的车厢序列的编号一次为1,2,3,…,n。设计一个程序,求出所有可能由此输出的长度为n的车厢序列。题目十:表达式求值问题描述:设计一个程序求任意一个浮点数表达式的计算结果。 题目十一:串的查找和替换问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。 题目十二:约瑟夫环问题描述:编号为1,2… n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个开始重新从1报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。 基本要求:1、利用单循环链表作为存储结构模拟此过程;2、键盘输入总人数、初始报数上限值m及各人密码;
3、按照出列顺序输出各人的编号。 题目十三:构造可以使n个城市连接的最小生成树
问题描述:给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
基本要求:1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。2、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。 题目十四:哈希表的设计与实现 问题描述: 设计哈希表实现电话号码查询系统。
基本要求:1、设每个记录有下列数据项:电话号码、用户名、地址;2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;
3、采用再哈希法解决冲突;4、查找并显示给定电话号码的记录;5、查找并显示给定用户名的记录。
6、在哈希函数确定的前提下,尝试各种不同类型处理冲突的方法(至少两种),考察平均查找长度的变化。 题目十五:构造01串
问题描述:给定七个整数N,A,B,L,C,D,M;要求设计一个01串S=S(1)S(2)…S(N)。
基本要求:1、S(i)=0或S(i)=1,1≤i≤N;
2、对于S的任何连续长度为L的子串S(j)S(j+1)…S(j+L-1) ,(1≤j≤N-L+1),0的个数大于等于A且小于等于B;
3、对于S的任何连续长度为M的子串S(j)S(j+1)…S(j+M-1) , (1≤j≤N-M+1),0的个数大于等于C且小于等于D; 列如,N=6,A=1,B=2,L=3,C=1,D=1,M=2,则存在一个满足上述所有条件的01串 S=10101。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-24
帮你顶下··估计VS2008没几个会用···主流还是6.0啊···
第2个回答  2013-07-24
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>
#include <string>
#define MAX_VERTEX_NUM 99
#define NULL 0
int i,j;
using namespace std;typedef struct Arcnode
{
char adjvex;
int number;
struct Arcnode *nextarc;
int time;
}Acrnode;typedef struct VNode
{
char data;
Acrnode *firstarc;
}VNode,Adjlist[MAX_VERTEX_NUM];typedef struct
{
Adjlist vertices;
int vexnum,arcnum;
}ALGraph;typedef struct
{
int *base;
int *top;
int stacksize;
}Sqstack;void exampleout()
{
ifstream fin;
ofstream fout;fin.open("example.txt");
if(fin.fail())
{
cout << "Input file opening failed.\n";
exit(1);
}
char a;
fin.get(a);
while(!fin.eof())
{
cout << a;
fin.get(a);
}
fin.close();
}void print()
{
ifstream fin;
ofstream fout;fin.open("result.txt");
if(fin.fail())
{
cout << "Input file opening failed.\n";
exit(1);
}
char a;
fin.get(a);
while(!fin.eof())
{
cout << a;
fin.get(a);
}
fin.close();
}int number(string b)//将数字字符串转化为对应的数字
{
int flag,num,number=0;
int m,n;
flag=b.length();
for(m=0;m<flag;m++)
{
num=b[m]-48;
for(n=0;n<flag-m-1;n++)
num=num*10;
number=number+num;
}
return number;
}void datain(ALGraph *G)
{
Acrnode *p,*q;
i=0; j=0;
char a; string b;ifstream fin;
ofstream fout;fin.open("data.txt");
if(fin.fail())
{
cout << "Input file opening failed.\n";
exit(1);
}fin.get(a);
while(a!='\n')
{
G->vertices[i].data=a;
//cout << G->vertices[i].data;
fin.get(a);
i++;
G->vexnum=i;
}G->arcnum=0;for(j=0;j<G->vexnum;j++)
{
fin.get(a);
if(a!='\n')
{
G->vertices[j].firstarc=(Acrnode *)malloc(sizeof(Acrnode));
G->vertices[j].firstarc->adjvex=a;
G->vertices[j].firstarc->nextarc=NULL;
//cout << G->vertices[j].data << G->vertices[j].firstarc->adjvex;
getline(fin,b,' ');
G->vertices[j].firstarc->time=number(b);
G->arcnum++;
//cout << G->vertices[j].firstarc->time;
q=G->vertices[j].firstarc;
fin.get(a);
while(a!='\n')
{
p=(Acrnode *)malloc(sizeof(Acrnode));
p->adjvex=a;
//cout << p->adjvex;
p->nextarc=NULL;
q->nextarc=p;
q=p;
getline(fin,b,' ');
p->time=number(b);
G->arcnum++;
//cout << p->time;
fin.get(a);
}
}
}
//cout << G->arcnum;
fin.close();
}void Findindegree(ALGraph G, int indegree[])
{
char x; Acrnode *r;
for(i=0;i<G.vexnum;i++)
{
x=G.vertices[i].data;
for(j=0;j<G.vexnum;j++)
{
r=G.vertices[j].firstarc;
while(r!=NULL)
{
if(r->adjvex==x) {indegree[i]++;r->number=i;r=NULL;}
else r=r->nextarc;
}
}
//cout << indegree[i];
}
}void Initstack(Sqstack &S)
{
S.base=(int *)malloc(MAX_VERTEX_NUM * sizeof(int));
S.top=S.base;
S.stacksize=MAX_VERTEX_NUM;
}int Stackempty(Sqstack S)
{
if(S.top==S.base) return 1;
else return 0;
}void Push(Sqstack &S,int x)
{
*S.top=x;
S.top++;
}
void Pop(Sqstack &S,int &x)
{
x=*--S.top;
}void Topologicalsort(ALGraph G,int indegree[])
//有向图G采用邻接表存储结构。
//若G无回路,则输出G的顶点的一个拓扑序列,否则返回ERROR。
{
Findindegree(G,indegree); //对各个顶求入度indegree[0..vernum-1]
Acrnode *p; int count,k;
Sqstack S;
Initstack(S);
for (i=0;i<G.vexnum;++i) //建零入度顶点栈S
if(!indegree[i]) Push(S,i); //入度为0者入栈
count=0; //对输出顶点计数
while(!Stackempty(S))
{
Pop(S,i);
//cout << G.vertices[i].data; //输出i号顶点并计数
++count;
for(p=G.vertices[i].firstarc; p; p=p->nextarc)
{
k=p->number; //对i号顶点的每个邻接点的入度减1
if(!(--indegree[k])) Push(S,k); //若入度减为0,则入栈
}
}
if(count<G.vexnum) cout << "ERROR!该工程不能顺利完成!"; //该有向图有回路
else cout << "Ready!该工程可以顺利完成!" << endl;
}void Topologicalorder(ALGraph G,Sqstack &T,int indegree[],int ve[])
//有向网G采用邻接表存储结构,求各顶点事件的最早发生时间ve
//T为拓扑排序顶点栈,S为零入度顶点栈。
//若G无回路,则用栈T返回G的一个拓扑序列,且函数值为OK,否则为ERROR。
{
Findindegree(G,indegree); //对各个顶求入度indegree[0..vernum-1]
Acrnode *p; int count,k;
Sqstack S;
Initstack(S);
for (i=0;i<G.vexnum;++i) //建零入度顶点栈S
if(!indegree[i]) Push(S,i); //入度为0者入栈
count=0; //对输出顶点计数

while(!Stackempty(S))
{
Pop(S,j);
Push(T,j);
++count; //j号顶点入T栈并计数
for(p=G.vertices[j].firstarc; p; p=p->nextarc)
{
k=p->number; //对i号顶点的每个邻接点的入度减1
if(!(--indegree[k])) Push(S,k); //若入度减为0,则入栈
if(ve[j]+p->time>ve[k]) ve[k]=ve[j]+p->time;
}
}
//for (i=0;i<G.vexnum;++i)
//cout << ve[i];
ofstream fout;
fout.open("result.txt");

fout.close();if(count<G.vexnum) cout << "ERROR"; //该有向图有回路
}void result(int a[],int b[],ALGraph G,int ve[],int vl[])
{
ofstream fout;
fout.open("result.txt");
fout << "工程的最短耗时为: " << ve[G.vexnum-1] << endl;
fout << "关键活动 最早开始时间 最晚开始时间" << endl;
for(j=0;j<i;j++)
{
fout << " <" << G.vertices[a[j]].data << "," << G.vertices[b[j]].data << "> ";
fout << ve[a[j]] << " " << ve[b[j]] << " ";
fout << vl[a[j]] << " " << vl[b[j]] << " " << endl;
}
fout.close();
}void Criticalpath(ALGraph G,int indegree[],int ve[],int vl[])
{
int a[MAX_VERTEX_NUM]={0};
int b[MAX_VERTEX_NUM]={0};
Sqstack T;
Initstack(T);
Topologicalorder(G,T,indegree,ve);
Acrnode *p;int k,dut,ee,el;
for(i=0;i<G.vexnum;++i)
vl[i]=ve[G.vexnum-1]; //初始化顶点时间的最迟发生时间
while(!Stackempty(T)) //按逆拓扑排序求各顶点的vl值
{
for(Pop(T,j),p=G.vertices[j].firstarc; p; p=p->nextarc)
{
k=p->number; dut=p->time;
if(vl[k]-dut<vl[j]) vl[j]=vl[k]-dut; //dut<j,k>
}
}
i=0;
for(j=0;j<G.vexnum;++j) //求ee,el和关键活动
for(p=G.vertices[j].firstarc;p;p=p->nextarc)
{
k=p->number; dut=p->time;
ee=ve[j]; el=vl[k]-dut;
if(ee == el)
{a[i]=j;b[i]=k;i++;} //输出关键活动
}
result(a,b,G,ve,vl);
}int main()
{ALGraph G; int ddy; char bye;

for(j=0;j<MAX_VERTEX_NUM;j++) {G.vertices[j].data=0;G.vertices[j].firstarc=NULL;}

int indegree[MAX_VERTEX_NUM]={0};
int ve[MAX_VERTEX_NUM]={0};
int vl[MAX_VERTEX_NUM]={0};

cout << "WELLCOME!本程序将计算工程的最短耗时和关键路径" << endl;
do
{
cout << endl << "请选择:" << endl;
cout << "1.查看数据文件示例文本" << endl;
cout << "2.检查输入的工程能否顺利完成" << endl;
cout << "3.计算工程的最短耗时和关键路径并生成文本文件" << endl;
cout << "4.显示计算结果" << endl;
cout << "0.退出" << endl << endl;
cin >> ddy;
switch(ddy)
{
case 1:exampleout();break;
case 2:{datain(&G); Topologicalsort(G,indegree);}break;
case 3:Criticalpath(G,indegree,ve,vl);break;
case 4:{print();cout << endl;}break;
case 0:cout << "再见!";break;
}
}while(ddy!=0);
cin.get(bye);
cin.get(bye);
return 0;
}data.txtABCDEFGHI
B6 C4 D5
E1
E1
F2
G9 H7
H4
I2
I4
example.txtABCDEFGHI(事件代号)
B6 C4 D5 (每个事件的后继事件及活动时间)
E1 (每个数字后空格)
E1
F2
G9 H 7
H4
I2
I4本回答被网友采纳
第3个回答  2013-07-24
这个问题暂时还不知道答案,我去给你查一下,你也多找找吧!