C++ 计算C+中DAG的关键路径+;

C++ 计算C+中DAG的关键路径+;,c++,path,graph-theory,dynamic-programming,directed-acyclic-graphs,C++,Path,Graph Theory,Dynamic Programming,Directed Acyclic Graphs,根据另一篇文章的说法,我正在计算图像DAG的关键路径。我的老师要求实现aarray,我简化了作业语句,一个通过数组实现的简单图形 这是我的代码,其中我有3个数组v、u和d,表示边的原始节点、边的结束节点以及每对顶点之间的距离,如上图所示。在图像的图表中,项目的持续时间等于25,对应于距关键路径的距离总和 我的代码无法根据的伪代码完成距离计算 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int numbertex=6;//顶点数 int numb

根据另一篇文章的说法,我正在计算图像DAG的关键路径。我的老师要求实现aarray,我简化了作业语句,一个通过数组实现的简单图形

这是我的代码,其中我有3个数组v、u和d,表示边的原始节点、边的结束节点以及每对顶点之间的距离,如上图所示。在图像的图表中,项目的持续时间等于25,对应于距关键路径的距离总和

我的代码无法根据的伪代码完成距离计算

#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int numbertex=6;//顶点数
int numberActivities=9;//边数
int i,j;
/*顶点的形式为(v,u)*/
//每个顶点的独立度(即,计算进入它们的边数)
int indegree[6]={0,0,0,0,0};
int v[9]={0,0,1,1,2,4,3,3,3};//数组v表示de边的起始顶点
int u[9]={1,2,2,3,4,5,4,5,5};//数组u表示de边的未来顶点
int d[9]={5,6,3,8,2,12,0,1,4};//数组d表示停止活动的时间(v,u)
int project_duration=0;//项目工期
/*#从图中计算每个顶点v的索引:
对于v的每个相邻u:indegree[u]+=1*/

对于(j=0;j,您的队列包含顶点。您的数组
u
v
d
,由边编号索引。 所以你不能写

first = Q.front();
... u[first] ...
因为
第一个
是一个顶点

更一般地说,如果使用有意义的变量名,代码将更容易阅读(错误也会更明显)。
first
不是很明确(first what?),而
u
v
d
也相当隐晦

写一些像

cur_vertex = todo.front()
distance[dest[cur_vertex]] = std::max(distance[dest[cur_vertex]], 
    distance[source[cur_vertex]]+ weight[cur_vertex]);
将立即提出一个问题:顶点的来源是什么? (这里我们使用变量名代替正确的类型检查。ADA程序员应该声明两种不同的整数类型,以避免顶点和边数之间的混淆。)


另一个问题:
first
的后续循环到哪里去了?它在伪代码中,但不在源代码中。

我不需要替代解决方案,只需要基于我的代码的解决方案。(y队列)通过适当的缩进和对代码错误的确切说明,您将得到更多的结果。
cur_vertex = todo.front()
distance[dest[cur_vertex]] = std::max(distance[dest[cur_vertex]], 
    distance[source[cur_vertex]]+ weight[cur_vertex]);