一个对“图”数据结构进行操作的开源库,对于图的存储结构由用户进行定义,该库只将核心的、不容易变化的算法部分进行了封装,用户可以方便的进行扩展。目前只支持迪杰斯特拉最短路径算法,并将不定期更新。
示例代码:
packagepers.fat.graph;importjava.util.ArrayList;importjava.util.List;importjunit.framework.Test;importjunit.framework.TestCase;importjunit.framework.TestSuite;publicclassAppTestextendsTestCase{publicvoidtest(){classMyNodeextendsNode{publicMyNode(StringnodeId){super(nodeId);}}NodestartNode=newMyNode("2");NodeendNode=newMyNode("9");//初始化图Graphgraph=newGraph(){List<Node>allNodes=newArrayList<>();{allNodes.add(newMyNode("0"));allNodes.add(newMyNode("1"));allNodes.add(newMyNode("2"));allNodes.add(newMyNode("3"));allNodes.add(newMyNode("4"));allNodes.add(newMyNode("5"));allNodes.add(newMyNode("6"));allNodes.add(newMyNode("7"));allNodes.add(newMyNode("8"));allNodes.add(newMyNode("9"));}int[][]edgs=newint[][]{newint[]{0,2,3,-1,-1,-1,-1,-1,-1,-1},newint[]{2,0,5,1,-1,-1,-1,-1,-1,-1},newint[]{3,5,0,4,-1,-1,2,-1,-1,-1},newint[]{-1,1,4,0,3,1,-1,-1,-1,-1},newint[]{-1,-1,-1,3,0,-1,-1,2,-1,-1},newint[]{-1,-1,-1,1,-1,0,-1,4,-1,-1},newint[]{-1,-1,2,-1,-1,-1,0,-1,2,-1},newint[]{-1,-1,-1,-1,2,4,-1,0,-1,3},newint[]{-1,-1,-1,-1,-1,-1,2,-1,0,3},newint[]{-1,-1,-1,-1,-1,-1,-1,3,3,0}};@OverridepublicList<Node>getNextNodes(NodecurNode){List<Node>nextNodes=newArrayList<>();for(intj=0;j<edgs[Integer.valueOf(curNode.getNodeId())].length;j++){inted=edgs[Integer.valueOf(curNode.getNodeId())][j];if(ed>0){nextNodes.add(allNodes.get(j));}}returnnextNodes;}@OverridepublicdoublegetWeight(NodefromNode,NodetoNode){returnedgs[Integer.valueOf(fromNode.getNodeId())][Integer.valueOf(toNode.getNodeId())];}};//选择最短路径算法ShortestPathByDijkstradijkstra=newShortestPathByDijkstra(graph);//得到最短路径SWPathpath=dijkstra.getShortestPath(startNode,endNode);System.out.println(path);}
评论