在求最短路径的算法中,要求所有边上的权值都不能为负值的算法是(①),虽然允许边上的权值为负值,但不允许在有向回路中出现负值的算法是(②).
A、Kruskal算法
B、Dijkstra算法
C、Floyd算法
D、Prim算法
A、Kruskal算法
B、Dijkstra算法
C、Floyd算法
D、Prim算法
在以下假设下,重写Djkstra算法:
(1)用邻接表表示有向带权图G,其中每个边结点有3个域:邻接顶点vertex,边上的权值length和边链表的链接指针link
(2)用集合T=V(G)-S代替S(已找到最短路径的顶点集合),利用链表来表示集合T。
试比较新算法与原来的算法,计算时间是快了还是慢了,给出定量的比较。
为,这里的路径长度是指路径中所含的边数。编写一个算法求T的直径、并分析算法的时间复杂度。
设图G是一个有向图,设顶点值为字符型,边上权值为浮点型,其十字链表的存储表示定义如下:
(1)实现图的构造函数Graphmu1.输人-系列顶点和边,建立带权有向图的十字链表。
(2)编写一个算法,基丁图G的十字链表表示求该图的强连通分量,试分析算法的时间复杂度。
(3)以图846为例,画出它的十字链表,第一次深度优先搜索得到的finished数组及最后得到的强连通分量。
间的一条最短路径,假设从初始顶点到目标顶点之间存在路径。现有一种解决该问题的方法:
(1)设最短路径初始时仅包含初始顶点,令当前顶点u为初始顶点;
(2)选择离u最近且尚未在最短路径中的一个顶点v,加人到最短路径中,并修改当前结点u=v;
(3)重复步骤(2),直到u是目标顶点时为止。
请问上述方法能否求解最短路径?若该方法可行,请证明之;否则请举例说明。
程分为若于阶段,每一阶段选取若干条边.算法思路如下:
(1)将每个顶点视为一棵树,图中所有顶点形成一个森林;
(2)为每棵树选取一条边,它是该树与其他树相连的所有边中权值最小的一条边,把该边加入生成树中。如果某棵树选取的边已经被其他树选过,则该边不再选取。
重复以上操作,直到整个森林变成一棵树。
以图8-44所示的图为例,写出执行以上算法的过程。
A.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况
B.当K≥1时高度为K的二叉树至多有2k-l个结点
C.将一棵树转换成二叉树后,根结点没有左子树
D.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近