已知以下的有向图,用Dijkstra算法求出从顶点1出发到各顶点的最短路径(按步给分)。
合成数(composite number)法,是消除图算法岐义性的一种通用方法。首先,在顶点的标识之间约定某一次序。比如,顶点标识为整数或字符时,可直接以整数或字符为序;对于字符串等标识,不妨按字典序排列。于是,若边(v,u)权重为w,则对应的合成数取作向量:(w,min(v,u),max(v,u))。如此,任何两条边总能明确地依照字典序比较出大小。
试在6.11.5节Prim算法和6.12.2节Dijkstra算法中引入这一方法,以消除其中的歧义性。
问题描述:给定有向图G=(V,E).设P是G的一个简单路(顶点不相交)的集合.如果V中每个顶点恰好在P的条路上,则称P是G的一个路径覆盖.P中路径可以从V的任何一个项点开始,长度也是任意的,特别地,可以为0.G的最小路径覆盖是G的所含路径条数最少的路径覆盖.
设计一个有效算法求一个有向无环图G的最小路径覆盖.
[设V={1,2,...,n},如下构造网络G1=(V1,E1):
每条边的容量均为1.求网络G1的(x0,y0)最大流.]
算法设计:对于给定的有向无环图G,找出G的一个最小路径覆盖.
数据输入:由文件input.txt提供输入数据.文件第1行有2个正整数n和m.n是给定有向无环图G的顶点数,m是G的边数.接下来的m行,每行有2个正整数i和j,表示一条有向边(i,j).
结果输出:将最小路径覆盖输出到文件output.txt.从第1行开始,每行输出一条路径.文件的最后一行是最少路径数.