设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。
作业题一般都得出钱找外包,才可能有人会去做
就好比你请同学帮你做,你将来总得掏钱请同学撮一顿不是?
#include
#include
#include
#include
#include
#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.
";
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.
";
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.
";
exit(1);
}fin.get(a);
while(a!='
')
{
G->vertices[i].data=a;
//cout vertices[i].data;
fin.get(a);
i++;
G->vexnum=i;
}G->arcnum=0;for(j=0;jvexnum;j++)
{
fin.get(a);
if(a!='
')
{
G->vertices[j].firstarc=(Acrnode *)malloc(sizeof(Acrnode));
G->vertices[j].firstarc->adjvex=a;
G->vertices[j].firstarc->nextarc=NULL;
//cout vertices[j].data vertices[j].firstarc->adjvex;
getline(fin,b,' ');
G->vertices[j].firstarc->time=number(b);
G->arcnum++;
//cout vertices[j].firstarc->time;
q=G->vertices[j].firstarc;
fin.get(a);
while(a!='
')
{
p=(Acrnode *)malloc(sizeof(Acrnode));
p->adjvex=a;
//cout adjvex;
p->nextarc=NULL;
q->nextarc=p;
q=p;
getline(fin,b,' ');
p->time=number(b);
G->arcnum++;
//cout time;
fin.get(a);
}
}
}
//cout 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 ";
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
}
}
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
)的关系——二次方程求闭区间[m,n]上的最值。求
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。
帮你顶下··估计VS2008没几个会用···主流还是6.0啊···
#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
这个问题暂时还不知道答案,我去给你查一下,你也多找找吧!
工程项目组织与管理讲义(第一章)
E.每一个工程项目阶段通常都包括一件以上事先定义好的工作成果。 三、工程项目管理(熟悉) 工程项目管理的目标就是运用各种知识、技能、手段和方法去满足或超出工程项目利害关系者的要求和期望。 工程项目管理的基本方法就是运用各种知识和资源通过计划、组织、协调、控制等工作方式,以达到工程项目的建设目标,满足各方...
工程问题的公式?
在日常生活中,做某一件事,制造某种产品,完成某项任务,完成某项工程等等,都要涉及到工作量、工作效率、工作时间这三个量,它们之间的基本数量关系是 工作量=工作效率×时间. 在小学数学中,探讨这三个数量之间关系的应用题,我们都叫做“工程问题”. 举一个简单例子. 一件工作,甲做10天可完成,乙做15天可完成.问...
工程结算与决算是不是一个意思?
工程建设周期长,耗用资金数大,为使建筑安装企业在施工中耗用的资金及时得到补偿,需要对工程价款进行中间结算(进度款结算)、年终结算,全部工程竣工验收后应进行竣工结算。在会计科目设置中,工程结算,为建造承包商专用的会计科目。 工程结算是工程项目承包中的一项十分重要的工作。全名为工程价款的结算,是...
帮我找40道有答案的一元一次方程
13.一架飞机飞行在两个城市之间,风速为每小时24千米,顺风飞行需要2小时50分钟,逆风飞行需要3小时,求两城市间距离。(二)工程问题:1.一项工程,甲单独做需要10天完成,乙单独做需要15天完成,两人合作4天后,剩下的部分由乙单独做,需要几天完成?2.某工程由甲、乙两队完成,甲队单独完成需16天,乙队单独完成需12天...
工程问题公式
1÷工作时间=单位时间内完成工作总量的几分之几;1÷单位时间能完成的几分之几=工作时间。(注意:用假设法解工程题,可任意假定工作总量为2、3、4、5……。特别是假定工作总量为几个工作时间的最小公倍数时,分数工程问题可以转化为比较简单的整数工程问题,计算将变得比较简便。)1、每份数×份数...
总工期与定额工期的区别是什么?
局限性:定额工期只关注特定的工作任务,无法提供整体项目的时间进度和完成时间。单一性:每个任务都有一个独立的定额工期,可能忽略了任务之间的依赖和协调。总工期和定额工期在工程项目管理中各有优势和局限,项目团队需要综合使用它们来实现合理的时间规划、有效的进度控制和项目执行的灵活性。项目类型和规模...
综合验收需要多久 “完成一项工程综合验收所需时间”
1、综合验收的含义 综合验收是指在一个项目或计划的实施过程中,最终对整个工程或产品进行的综合性检查和核算,以确保其达到既定标准和目标。综合验收涉及到多个方面,包括质量、进度、成本、安全等,它们都需要进行考核,以验证整个项目的运行情况。由于综合验收需要检查的内容比较多,所以耗时比较长,而验收...
小学工程问题的分类和解答
在日常生活中,做某一件事,制造某种产品,完成某项任务,完成某项工程等等,都要涉及到工作量、工作效率、工作时间这三个量,它们之间的基本数量关系是 工作量...这一节的多数例题都进行了“整数化”的处理.但是,“整数化”并不能使所有工程问题的计算简便.例8就是如此.例8也可以整数化,当求出乙每 有一点方便,...
求关于一元二次方程组的应用 的题(必须有答案)
第二问只要求出每天应各付甲、乙、丙各队多少 钱,并由第一问求出甲、乙、丙各队单独完成这项工作所需的天数,即可求出在规定时间内单独完成此项工程哪个队花钱最少。 解:(1)设甲队单独做x天完成,乙队单独做y天完成,丙队单独做z天完成 由题意可得: 解这个方程组得: 经检验此解是所列方程组的解 答...
工程有多少个程序
规模、要求等的不同,其具体的程序也会有所差异。因此,工程所包含的程序数量并不是固定的,会因具体情况而异。总的来说,工程的程序是根据项目的具体需求而设定的,旨在确保工程能够按照预定的目标、要求和标准顺利进行。每一个程序都有其独特的作用和意义,共同构成了工程的完整工作流程。