public class BellmanFord extends Object implements Algorithm
The Bellman-Ford algorithm computes single-source shortest paths in a weighted digraph (where some of the edge weights may be negative). Dijkstra's algorithm accomplishes the same problem with a lower running time, but requires edge weights to be non-negative. Thus, Bellman-Ford is usually used only when there are negative edge weights (from the Wikipedia).
import java.io.IOException; import java.io.StringReader; import org.graphstream.algorithm.BellmanFord; import org.graphstream.graph.Graph; import org.graphstream.graph.implementations.DefaultGraph; import org.graphstream.stream.file.FileSourceDGS; public class BellmanFordTest { // B-(1)-C // / \ // (1) (10) // / \ // A F // \ / // (1) (1) // \ / // D-(1)-E static String my_graph = "DGS004\n" + "my 0 0\n" + "an A \n" + "an B \n" + "an C \n" + "an D \n" + "an E \n" + "an F \n" + "ae AB A B weight:1 \n" + "ae AD A D weight:1 \n" + "ae BC B C weight:1 \n" + "ae CF C F weight:10 \n" + "ae DE D E weight:1 \n" + "ae EF E F weight:1 \n" ; public static void main(String[] args) throws IOException { Graph graph = new DefaultGraph("Bellman-Ford Test"); StringReader reader = new StringReader(my_graph); FileSourceDGS source = new FileSourceDGS(); source.addSink(graph); source.readAll(reader); BellmanFord bf = new BellmanFord("weight","A"); bf.init(graph); bf.compute(); System.out.println(bf.getShortestPath(graph.getNode("F"))); } }
This Implementation is only a stub. For the moment only attributes located on the edges are supported. If you need more features, consider using the Dijkstra implementation. If you really need that algorithm, please contact the team members through the mailing list.
Constructor and Description |
---|
BellmanFord(String attribute)
Build a new BellmanFord algorithm giving the name of the weight attribute
for edges.
|
BellmanFord(String attribute,
String sourceNode)
Same that
BellmanFord(String) but setting the id of the source
node. |
Modifier and Type | Method and Description |
---|---|
void |
compute()
Run the algorithm.
|
String |
getIdentifier()
The unique identifier of this instance.
|
List<org.graphstream.graph.Path> |
getPathSetShortestPaths(org.graphstream.graph.Node end)
Constructs all the possible shortest paths from the source node to the
destination (end).
|
org.graphstream.graph.Path |
getShortestPath(org.graphstream.graph.Node target)
Returns the shortest path between the source node and one given target.
|
double |
getShortestPathValue(org.graphstream.graph.Node target)
Returns the value of the shortest path between the source node and the
given target according to the attribute specified in the constructor.
|
String |
getSource()
Get the id of node used as source.
|
void |
init(org.graphstream.graph.Graph graph)
Initialization of the algorithm.
|
void |
setIdentifier(String identifier)
Set the unique identifier for this instance.
|
void |
setSource(String nodeId)
Set the id of the node used as source.
|
public BellmanFord(String attribute)
attribute
- weight attribute of edgespublic BellmanFord(String attribute, String sourceNode)
BellmanFord(String)
but setting the id of the source
node.attribute
- weight attribute of edgessourceNode
- id of the source nodepublic void setSource(String nodeId)
nodeId
- id of the source nodepublic String getSource()
public List<org.graphstream.graph.Path> getPathSetShortestPaths(org.graphstream.graph.Node end)
end
- The destination to which shortest paths are computed.Path
objects.public void init(org.graphstream.graph.Graph graph)
Algorithm
Algorithm.compute()
method to initialize or reset the algorithm according
to the new given graph.public void setIdentifier(String identifier)
identifier
- the unique identifier to setgetIdentifier()
public String getIdentifier()
public double getShortestPathValue(org.graphstream.graph.Node target)
target
is not in the same connected component as the source
node, then the method returns Double.POSITIVE_INFINITY
(Infinity).target
- The endpoint of the path to compute from the source node given
in the constructor.public org.graphstream.graph.Path getShortestPath(org.graphstream.graph.Node target)
target
- the target of the shortest path starting at the source node
given in the constructor.Path
object that constrains the
list of nodes and edges that constitute it.public void compute()
Algorithm
Algorithm.init(Graph)
method has to be called
before computing.compute
in interface Algorithm
Algorithm.init(Graph)
Copyright © 2015. All rights reserved.