操作数据结构“图”的库 graph-lib

Apache
Java
跨平台
2019-11-05
FAT_mt
graph-lib 正在参加 2019 年度最受欢迎开源中国软件评选,请投票支持!
graph-lib 在 2019 年度最受欢迎开源中国软件评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票赢奖品
已投票

一个对“图”数据结构进行操作的开源库,对于图的存储结构由用户进行定义,该库只将核心的、不容易变化的算法部分进行了封装,用户可以方便的进行扩展。目前只支持迪杰斯特拉最短路径算法,并将不定期更新。

示例代码:

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);
}

 

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Docker image 存储路径解析

在生产环境中,经常遇到docker image 在资源池中的主机上存留的数据,由于随着业务系统的升级,旧的image 需要进行清理。这里梳理下,docker image的在linux 系统上的存储目录,以针对性的进...

2018/06/02 07:25
1K
0
在Windows Mobile 5中使用DirectShow控制摄像头-转

A number of Windows Mobile 5.0 APIs (for example, SHCameraCapture) make it trivial for a mobile application developer to access a camera, but their ease of use comes at a price—...

2014/07/09 17:42
2
0
docker各个版本修改存储路径

Docker 修改存储路径 Docker 版本 1.13 及以下 systemctl stop docker.service cp /usr/lib/systemd/system/docker.service /home/docker.service_20180528 # 修改存储路径 ( /home/docker_d...

09/24 15:48
5
0
用DirectX Audio和DirectShow播放声音和音乐(7)

加入到MP3的革命中 MP3是一种音频压缩格式,它通过删除或修改音乐中不易被人耳察觉的部分来使音乐更小,占用的存储空间更少。在项目中使用MP3(.MP3文件)需要使用DirectX中的 DirectShow组件...

2016/06/20 13:40
0
0
用DirectX Audio和DirectShow播放声音和音乐(7)

加入到MP3的革命中 MP3是一种音频压缩格式,它通过删除或修改音乐中不易被人耳察觉的部分来使音乐更小,占用的存储空间更少。在项目中使用MP3(.MP3文件)需要使用DirectX中的 DirectShow组件...

2016/06/20 13:38
0
0
用DirectX Audio和DirectShow播放声音和音乐(7)

加入到MP3的革命中 MP3是一种音频压缩格式,它通过删除或修改音乐中不易被人耳察觉的部分来使音乐更小,占用的存储空间更少。在项目中使用MP3(.MP3文件)需要使用DirectX中的 DirectShow组件...

2016/06/20 13:38
5
0
用DirectX Audio和DirectShow播放声音和音乐(7)

加入到MP3的革命中 MP3是一种音频压缩格式,它通过删除或修改音乐中不易被人耳察觉的部分来使音乐更小,占用的存储空间更少。在项目中使用MP3(.MP3文件)需要使用DirectX中的 DirectShow组件...

2016/06/20 13:39
2
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部