类 BellmanFordSP
- java.lang.Object
-
- edu.princeton.cs.algs4.BellmanFordSP
-
public class BellmanFordSP extends java.lang.Object
TheBellmanFordSP
class represents a data type for solving the single-source shortest paths problem in edge-weighted digraphs with no negative cycles. The edge weights can be positive, negative, or zero. This class finds either a shortest path from the source vertex s to every other vertex or a negative cycle reachable from the source vertex.This implementation uses the Bellman-Ford-Moore algorithm. The constructor takes time proportional to V (V + E) in the worst case, where V is the number of vertices and E is the number of edges. Each call to
distTo(int)
andhasPathTo(int)
,hasNegativeCycle
takes constant time; each call topathTo(int)
andnegativeCycle()
takes time proportional to length of the path returned.For additional documentation, see Section 4.4 of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne.
-
-
构造器概要
构造器 构造器 说明 BellmanFordSP(EdgeWeightedDigraph G, int s)
Computes a shortest paths tree froms
to every other vertex in the edge-weighted digraphG
.
-
方法概要
修饰符和类型 方法 说明 double
distTo(int v)
Returns the length of a shortest path from the source vertexs
to vertexv
.boolean
hasNegativeCycle()
Is there a negative cycle reachable from the source vertexs
?boolean
hasPathTo(int v)
Is there a path from the sources
to vertexv
?static void
main(java.lang.String[] args)
Unit tests theBellmanFordSP
data type.java.lang.Iterable<DirectedEdge>
negativeCycle()
Returns a negative cycle reachable from the source vertexs
, ornull
if there is no such cycle.java.lang.Iterable<DirectedEdge>
pathTo(int v)
Returns a shortest path from the sources
to vertexv
.
-
-
-
构造器详细资料
-
BellmanFordSP
public BellmanFordSP(EdgeWeightedDigraph G, int s)
Computes a shortest paths tree froms
to every other vertex in the edge-weighted digraphG
.- 参数:
G
- the acyclic digraphs
- the source vertex- 抛出:
java.lang.IllegalArgumentException
- unless0 <= s < V
-
-
方法详细资料
-
hasNegativeCycle
public boolean hasNegativeCycle()
Is there a negative cycle reachable from the source vertexs
?- 返回:
true
if there is a negative cycle reachable from the source vertexs
, andfalse
otherwise
-
negativeCycle
public java.lang.Iterable<DirectedEdge> negativeCycle()
Returns a negative cycle reachable from the source vertexs
, ornull
if there is no such cycle.- 返回:
- a negative cycle reachable from the soruce vertex
s
as an iterable of edges, andnull
if there is no such cycle
-
distTo
public double distTo(int v)
Returns the length of a shortest path from the source vertexs
to vertexv
.- 参数:
v
- the destination vertex- 返回:
- the length of a shortest path from the source vertex
s
to vertexv
;Double.POSITIVE_INFINITY
if no such path - 抛出:
java.lang.UnsupportedOperationException
- if there is a negative cost cycle reachable from the source vertexs
java.lang.IllegalArgumentException
- unless0 <= v < V
-
hasPathTo
public boolean hasPathTo(int v)
Is there a path from the sources
to vertexv
?- 参数:
v
- the destination vertex- 返回:
true
if there is a path from the source vertexs
to vertexv
, andfalse
otherwise- 抛出:
java.lang.IllegalArgumentException
- unless0 <= v < V
-
pathTo
public java.lang.Iterable<DirectedEdge> pathTo(int v)
Returns a shortest path from the sources
to vertexv
.- 参数:
v
- the destination vertex- 返回:
- a shortest path from the source
s
to vertexv
as an iterable of edges, andnull
if no such path - 抛出:
java.lang.UnsupportedOperationException
- if there is a negative cost cycle reachable from the source vertexs
java.lang.IllegalArgumentException
- unless0 <= v < V
-
main
public static void main(java.lang.String[] args)
Unit tests theBellmanFordSP
data type.- 参数:
args
- the command-line arguments
-
-