数据结构,为什么?详解! AB判断有否环,就是要知道 if(v0=vm)即判断 某一个点和查找过程中的另一个点,是否是同一个点我的想法是这样的,希望和大家交流下.1.[深度优先遍历]的概念:假定每一个点都没被访问过。从起点开始,找邻接的点。对每个点,只要存在有向的路径,查找就可以继续,顺藤摸瓜(同时把经过的点给标记成“已访问”)。一旦遇到“已访问”就表示,有环路。2.[拓扑],一般判断环路都靠它任一有向无环图,必定有拓扑排序(有可能多个)所以如果拓扑排序成功,则无环路;排序失败,则有环路3.[求最短路径]的算法很多,Dijkstra算法,SPFA算法,Floyd-Warshall算法,Johnson算法,Bellman-Ford算法.我想这里指的是Dijkstra算法吧,Dijkstra解决的问题是:指定起始点,计算它到图中各点的最小路径。条件是图中无负权。Dijkstra的想法是“最短路径的前缀一定是最短路径”,于是有环的路径肯定被剔除,但是被剔除的不一定都有环啊,所以没法直接判断这整个图有没有环。4.[求关键路径]求关键路径的前提是无环.一般求关键路径之前会先用[拓扑]验证一下是否有环5.[广度优先搜索]广度优先搜索,好比树的层次遍历。在有向图中,广度优先搜索不能判断环路—无法通过判断“已。
拓扑排序和关键路径是如何实现的 拓扑排序的实现步骤:由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下三步,直到不存在入度为0的顶点为止;(1)选择一个入度为0的顶点并输出之;(2)从网中删除此顶点及所有出边;(3)循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。求关键路径的算法:(1)输入e条弧,k>;,建立AOE网的存储结构。(2)从源点v1出发,令ve(1)=0,求 ve(j)2。(3)从汇点vn出发,令vl(n)=ve(n),求 vl(i)1。(4)根据各顶点的ve和vl值,求每条弧s(活动)的最早开始时间e(s)和最晚开始时间l(s),其中e(s)=l(s)的为关键活动。
数据结构中,在求关键路径时,是不是先求逆拓扑排序,ToplogicalOrder 有环图不能求关键路径,求关键路径是在拓扑排序的前提下进行的,不能进行拓扑排序,自然也不能求关键路径。