一个对“图”数据结构进行操作的开源库,对于图的存储结构由用户进行定义,该库只将核心的、不容易变化的算法部分进行了封装,用户可以方便的进行扩展。目前只支持迪杰斯特拉最短路径算法,并将不定期更新。
示例代码:
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语言笔试中常考的一部分。 下面的代码实现了串的主要操作。 上面的代码就是串的相关操作。