有向无环图的关键路径(Critical path of directed acyclic graphs).doc
-
资源ID:9240210
资源大小:52KB
全文页数:16页
- 资源格式: DOC
下载积分:4元
快捷下载
会员登录下载
微信登录下载
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
有向无环图的关键路径(Critical path of directed acyclic graphs).doc
有向无环图的关键路径(Critical path of directed acyclic graphs)#包含iostream > <#包括<字符串>#包括<<栈>使用命名空间;#定义max_vertex_num 20typedef struct阿克诺德国际adjvex;/ /该弧所指向的顶点的位置struct阿克诺德* nextarc;/ /指向下一条弧的指针国际信息;/ /弧上的信息/ / / /该弧相关信息字符串信息; ArcNode;typedef struct VNode int数据;/ /顶点信息阿克诺德* firstarc;/ /指向第一条依附该顶点的弧的指针 VNode,adjlist max_vertex_num ;typedef struct adjlist顶点;/ /存储图int毒液,arcnum;/ /图的当前顶点数和弧数int类型;/ /图的种类标志 ALGraph;int入度 max_vertex_num = 0 ;/用于拓扑排序int CreateUG(algraph & G)cout <<“请输入图中顶点个数和边数:”;> > > > g.arcnum g.venum CIN;int i;为(i = 0;i < g.venum;i+)g.vertices 我。数据= I + 1;g.vertices 我。firstarc = null;为(i = 0;i < g.arcnum;i+)cout <<“请输入你要加入的边的信息:”;int v1,v2;> > > > V2 V1 CIN;阿克诺德*电流= g.vertices v1-1 firstarc ;阿克诺德P = g.vertices v1-1 firstarc ;如果(电流= = null)g.vertices v1-1 。firstarc =新阿克诺德;g.vertices v1-1 。firstarc -> adjvex = V2-1;g.vertices v1-1 。firstarc -> nextarc = null;别的而(电流!= null)P =电流;电流=电流-> nextarc;电流=新阿克诺德;电流- adjvex = V2-1;电流- > nextarc = null;P > nextarc =电流;电流= g.vertices V2-1 firstarc ;P = g.vertices V2-1 firstarc ;如果(电流= = null)g.vertices V2-1 。firstarc =新阿克诺德;g.vertices V2-1 。firstarc -> adjvex = v1-1;g.vertices V2-1 。firstarc -> nextarc = null;别的而(电流!= null)P =电流;电流=电流-> nextarc;电流=新阿克诺德;目前adjvex = v1-1 ->;电流- > nextarc = null;P > nextarc =电流;返回1;int CreateDG(algraph & G)cout <<“请输入图中顶点个数和边数:”;> > > > g.arcnum g.venum CIN;int i;为(i = 0;i < g.venum;i+)g.vertices 我。数据= I + 1;g.vertices 我。firstarc = null;为(i = 0;i < g.arcnum;i+)cout <<“请输入你要加入的边的信息:”;int v1,v2,信息;> > > > V2 V1 CIN > >信息;阿克诺德*电流= g.vertices v1-1 firstarc ;阿克诺德P = g.vertices v1-1 firstarc ;入度V2-1 + ;如果(电流= = null)g.vertices v1-1 。firstarc =新阿克诺德;g.vertices v1-1 。firstarc -> adjvex = V2-1;g.vertices v1-1 。firstarc -> nextarc = null;g.vertices v1-1 。firstarc ->信息=信息;别的而(电流!= null)P =电流;电流=电流-> nextarc;电流=新阿克诺德;电流- adjvex = V2-1;电流- > nextarc = null;电流->信息=信息;P > nextarc =电流;返回1;国际createdg1(algraph & G)cout <<“请输入图中顶点个数和边数:”;> > > > g.arcnum g.venum CIN;int i;为(i = 0;i < g.venum;i+)g.vertices 我。数据= I + 1;g.vertices 我。firstarc = null;为(i = 0;i < g.arcnum;i+)cout <<“请输入你要加入的边的信息:”;int v1,v2;> > > > V2 V1 CIN;阿克诺德*电流= g.vertices V2-1 firstarc ;阿克诺德P = g.vertices V2-1 firstarc ;如果(电流= = null)g.vertices V2-1 。firstarc =新阿克诺德;g.vertices V2-1 。firstarc -> adjvex = v1-1;g.vertices V2-1 。firstarc -> nextarc = null;别的而(电流!= null)P =电流;电流=电流-> nextarc;电流=新阿克诺德;目前adjvex = v1-1 ->;电流- > nextarc = null;P > nextarc =电流;返回1;int CreateGraph(algraph & G)cout <<“请输入图的种类标志:”;CIN > > G.kind;开关(G.kind)案例0:返回createug(G);/ /构造无向图案例1:返回createdg(G);/ /构造有向图案例2:返回createdg1(G);/ /构造逆邻接图默认值:返回0;在我 max_vertex_num = 0 ;bool TopologicalSort(algraph & G,栈< int > & T)<国际>的堆栈;int i;为(i = 0;i < g.venum;i+)如果(入度我 = = 0)S.push(我);int数= 0;而(!美国empty())我top() =美国;美国pop();T.push(我);+ +计数;阿克诺德* p = null;为(P = g.vertices 我。firstarc;P!= null;P = P - > nextarc)int W = P > adjvex;入度水;如果(入度W = = 0)S.push(W);如果(我我 + P >信息>我我们)我我们,我我 + P ->信息;如果(计数g.venum)cout <<“有向图中有环存在”<< endl;返回false;返回true;无效的关键(algraph & G)int k,DUT;堆栈<国际> T;如果(!TopologicalSort(G,T)返回;int v1 max_vertex_num ;为(k = 0;Kg.venum;K+)V1 K =我 g.venum-1 ;而(!T. empty())int i = t top();pop() T.;对于(阿克诺德* P = g.vertices 我。firstarc;P!= null;P = P - > nextarc)K = P > adjvex;大连理工= P ->信息;如果(V1 K - DUTV1 我)V1 我 = V1 K - DUT;为(j = 0;J < g.venum;j+)对于(阿克诺德*q = g.vertices J。firstarc;Q!= null;q = q > nextarc)K = Q > adjvex;大连理工= Q ->信息;如果(我 J = = V1 K - DUT)cout <<“关键路径:“<< g.vertices J。数据<<”<< g.vertices K。数据<< endl;main() intALGraph G;建立(G);阿克诺德*电流1;阿克诺德* P;为(int k = 0;Kg.venum;K+)cout << g.vertices K。数据<<”;阿克诺德*电流1 = g.vertices K。firstarc;而(电流1!= null)cout <<电流1 -> adjvex <<”;电流1 =电流1 -> nextarc;cout << endl;系统(“暂停”);CriticalPath(G);系统(“暂停”);为(int i = 0;i < g.venum;i+) /析构函数电流1 = P = g.vertices 我。firstarc;如果(电流1 = = null)继续;别的而(P!= null)P =电流1 -> nextarc;删除电流1;电流1 = P;返回1;