当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

graph-lib

操作数据结构“图”的库
授权协议 Apache
开发语言 Java
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 范承志
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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

示例代码:

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

 

  • 一般的python包可以用pip install <package>进行方便的安装。但是graph-tool不能靠像pip这种单纯的python包管理系统来安装。因为它的核心数据结构和算法是用C++写的,因此会有很多C++依赖性(比如依赖Boost, CGAL和expat)。在GNU/Linux和MacOS环境下可以用特定的包管理器直接安装graph-tool。 graph-tool也可以通过编译

  • 不得不吐槽一句,像Graph-tool这种工具,这么麻烦的安装过程和限制条件,注定没有多少人用啊! 我在两个Ubuntu系统上试着安装,都报了一样的错,实在是郁闷。看到Graph-tool的邮件列表里有人问了类似的问题:http://main-discussion-list-for-the-graph-tool-project.982480.n3.nabble.com/Problem-with-c

  • graph-tool需要的依赖比较多,下面仅列出了主要的部分,比较简单的依赖可以参考报错自行解决。 需要注意的是,gcc8.3.0在编译的时候会有bug,升级到9.3.0之后问题消失。升级gcc之后需要重新编译py,否则跟graph-tool一起会报bug。 1 安装boost 1.1 下载并解压boost源码 1.2 执行bootstrap脚本 必须跟三个参数 ./bootstrap.sh --

  • ** win10安装 graph_tool工具箱 ** 前面在win10下搭建ClearMap环境时由于其它问题注释掉了graph_tool工具箱,没有安装,接下来进行单独安装。 参考: graph_tool官网:https://graph-tool.skewed.de/ https://blog.csdn.net/HUSTHY/article/details/108260470 一般的pytho

  • graph_tool MacOS 安装与配置 graph_tool虽然是个python库,但是毕竟是要做大量数据计算的,因此graphtool在底层使用了Boost, CGAL 和 expat这几个C++库(Boost是扩展的标准库,CGAL是一个计算几何算法库,expat是一个XML解析器)。 这就导致了使用通常的pip和easyinstall不太好直接安装。 安装过程主要参考 graph_to

 相关资料
  • 图(graph) 图由边的集合及顶点的集合组成 有向图: 无向图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Graph</title> </head> <body> <script> function Graph(v){ this.vertices=v;

  • 图形是一组对象的图形表示,其中一些对象通过链接连接。 互连对象由称为vertices的点表示,连接顶点的链接称为edges 。 形式上,图形是一对集合(V, E) ,其中V是顶点集合, E是边缘集合,连接顶点对。 看看下面的图表 - 在上图中, V = {a,b,c,d,e} E = {ab,ac,bd,cd,de} 图数据结构 数学图可以用数据结构表示。 我们可以使用顶点数组和二维边数组来表示图

  • 当前的GraphX仅仅支持一组简单的常用结构性操作。下面是基本的结构性操作列表。 class Graph[VD, ED] { def reverse: Graph[VD, ED] def subgraph(epred: EdgeTriplet[VD,ED] => Boolean, vpred: (VertexId, VD) => Boolean): Graph

  • 本文向大家介绍数据结构中的最大WBLT操作,包括了数据结构中的最大WBLT操作的使用技巧和注意事项,需要的朋友参考一下 在这里,我们将看到什么是不同的Max-WBLT操作。HBLT具有不同的操作,例如插入,删除和初始化。它们也与WBLT非常相似。但是,融合操作可以在一次从上到下的过程中完成。 WBLT可以进行单遍熔合操作。因为我们可以在下降的过程中找到w值。我们可以根据需要更新w值并交换子树。对于

  • 主要内容:图存储结构基本常识,图存储结构的分类我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用 线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构—— 图存储结构。 图 1 图存储结构示意图 图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看出数据之间具有的"多对多"关系。例如,V1 与 V4 和 V2 建立着联系,V4 与 V1 和 V3 建立着

  • 本文向大家介绍数据结构串的操作实例详解,包括了数据结构串的操作实例详解的使用技巧和注意事项,需要的朋友参考一下 数据结构串的操作实例详解 串是一种特殊的线性表,它的每个结点是一个字符,所以串也称作字符串。     关于串的操作主要有求串长,串复制,串连接,求子串,串插入,串删除,子串定位等。串的操作也是C语言笔试中常考的一部分。     下面的代码实现了串的主要操作。 上面的代码就是串的相关操作。