graph-lib操作數(shù)據(jù)結(jié)構(gòu)“圖”的庫(kù)
一個(gè)對(duì)“圖”數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的開源庫(kù),對(duì)于圖的存儲(chǔ)結(jié)構(gòu)由用戶進(jìn)行定義,該庫(kù)只將核心的、不容易變化的算法部分進(jìn)行了封裝,用戶可以方便的進(jìn)行擴(kuò)展。目前只支持迪杰斯特拉最短路徑算法,并將不定期更新。
示例代碼:
package pers.fat.graph;
import java.util.ArrayList; import java.util.List;
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite;
public class AppTest extends TestCase { public void test() { class MyNode extends Node {
public MyNode(String nodeId) {
super(nodeId);
}
}
Node startNode = new MyNode("2");
Node endNode = new MyNode("9");
// 初始化圖
Graph graph = new Graph() {
List<Node> allNodes = new ArrayList<>();
{
allNodes.add(new MyNode("0"));
allNodes.add(new MyNode("1"));
allNodes.add(new MyNode("2"));
allNodes.add(new MyNode("3"));
allNodes.add(new MyNode("4"));
allNodes.add(new MyNode("5"));
allNodes.add(new MyNode("6"));
allNodes.add(new MyNode("7"));
allNodes.add(new MyNode("8"));
allNodes.add(new MyNode("9"));
}
int[][] edgs = new int[][] {
new int[] { 0, 2, 3, -1, -1, -1, -1, -1, -1, -1 },
new int[] { 2, 0, 5, 1, -1, -1, -1, -1, -1, -1 },
new int[] { 3, 5, 0, 4, -1, -1, 2, -1, -1, -1 },
new int[] { -1, 1, 4, 0, 3, 1, -1, -1, -1, -1 },
new int[] { -1, -1, -1, 3, 0, -1, -1, 2, -1, -1 },
new int[] { -1, -1, -1, 1, -1, 0, -1, 4, -1, -1 },
new int[] { -1, -1, 2, -1, -1, -1, 0, -1, 2, -1 },
new int[] { -1, -1, -1, -1, 2, 4, -1, 0, -1, 3 },
new int[] { -1, -1, -1, -1, -1, -1, 2, -1, 0, 3 },
new int[] { -1, -1, -1, -1, -1, -1, -1, 3, 3, 0 } };
@Override
public List<Node> getNextNodes(Node curNode) {
List<Node> nextNodes = new ArrayList<>();
for (int j = 0; j < edgs[Integer.valueOf(curNode.getNodeId())].length; j++) {
int ed = edgs[Integer.valueOf(curNode.getNodeId())][j];
if (ed > 0) {
nextNodes.add(allNodes.get(j));
}
}
return nextNodes;
}
@Override
public double getWeight(Node fromNode, Node toNode) {
return edgs[Integer.valueOf(fromNode.getNodeId())][Integer
.valueOf(toNode.getNodeId())];
}
};
// 選擇最短路徑算法
ShortestPathByDijkstra dijkstra = new ShortestPathByDijkstra(graph);
// 得到最短路徑
SWPath path = dijkstra.getShortestPath(startNode, endNode);
System.out.println(path);
}
評(píng)論
圖片
表情
