标签: jgrapht

是否可以使用jGraphT检查TicTacToe游戏的获胜条件?

我发现这个有效的解决方案

private int[] winningPatterns = { 0b111000000, 0b000111000, 0b000000111, // rows
        0b100100100, 0b010010010, 0b001001001, // cols
        0b100010001, 0b001010100 // diagonals
};

/** Returns true if thePlayer wins */
private boolean hasWon(int thePlayer) {
    int pattern = 0b000000000; // 9-bit pattern for the 9 cells
    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            if (cells[row][col].content == thePlayer) {
                pattern |= (1 << (row * 3 + col));
            }
        } …
Run Code Online (Sandbox Code Playgroud)

java jgrapht tic-tac-toe

17
推荐指数
1
解决办法
319
查看次数

纯粹在内存中运行Neo4j而没有任何持久性

我不想保留任何数据,但仍希望使用Neo4j进行图形遍历和算法功能.在嵌入式数据库中,我已配置cache_type = strong并在所有写入之后将事务设置为失败.但是我的写入速度(节点,关系创建速度)很慢,这成为我的过程中的一大瓶颈.

所以,问题是,Neo4j可以在没有任何持久性方面的情况下运行吗,就像纯API一样?我尝试过像JGraphT这样的其他人,但那些没有Neo4j提供的遍历机制.

java jgrapht neo4j

15
推荐指数
1
解决办法
4186
查看次数

受保护的?JGraphT DefaultEdge类上的getSource和getTarget方法

这些方法getSource()getTarget()DefaultEdgeorg.jgrapht.graph.DefaultEdge保护.

我应该如何访问每个边缘的源和目标顶点返回由edgeSet()org.jgrapht.graph.SimpleGraph

下面的代码显示了正在发生的事情.

import java.util.Set;

import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

public class TestEdges
{
    public static void main(String [] args)
    {
        UndirectedGraph<String, DefaultEdge> g =
            new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

        String A = "A";
        String B = "B";
        String C = "C";

        // add the vertices
        g.addVertex(A);
        g.addVertex(B);
        g.addVertex(C);

        g.addEdge(A, B);
        g.addEdge(B, C);
        g.addEdge(A, C);

        Set<DefaultEdge> edges = g.edgeSet();

        for(DefaultEdge edge : edges) {
            String v1   = edge.getSource(); // …
Run Code Online (Sandbox Code Playgroud)

jgrapht

15
推荐指数
1
解决办法
3102
查看次数

在有向图中找到具有权重限制的两个顶点之间的所有路径

我试图在一个可能有循环但没有自循环的有向加权图中找到权重小于N 的两个顶点之间的所有路径。到目前为止,我只能通过使用AllDirectedPaths然后过滤掉权重大于 N 的路径来做到这一点:

SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> g = new SimpleDirectedWeightedGraph<>(DefaultWeightedEdge.class);
AllDirectedPaths<String, DefaultWeightedEdge> allPaths = new AllDirectedPaths<>(g);
int maxWeight = 30;
List<GraphPath<String, DefaultWeightedEdge>> pathsLimitedByWeight = allPaths.getAllPaths(startVertex, endVertex, false, maxWeight / minGraphLatency)
    .filter(graphPath -> graphPath.getWeight() < maxWeight)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这种方法显然是次优的,因为对于较大的图形它很慢。为了限制输出并使其更快,我提供maxPathLengthAllDirectedPaths#getAllPaths,我将其设置为路径可以除以图中边的最小权重的最大权重,因为在我的情况下,边权重是一个整数并且总是大于1.

我考虑过使用KShortestSimplePathscustom PathValidator,但它只支持简单的路径,即不允许循环。

如果有的话,我在 jgrapht 中还有什么其他选项可以用来解决查找所有路径而不必自己遍历图形。

java graph-theory jgrapht

14
推荐指数
1
解决办法
784
查看次数

如何将jgrapht简单图形序列化为json?

我有一个来自jgrapht的简单有向图,我正在尝试使用jackson将其序列化为JSON文件,如下所示:

ObjectMapper mapper = new ObjectMapper();
File output = new File("P:\\tree.json");
ObjectWriter objectWriter = mapper.writer().withDefaultPrettyPrinter();
objectWriter.writeValue(output,simpleDirectedGraph);
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class org.jgrapht.graph.AbstractBaseGraph$ArrayListFactory and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: org.jgrapht.graph.SimpleDirectedGraph["edgeSetFactory"])
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:69)
    at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:32)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:693)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1387)
    at com.fasterxml.jackson.databind.ObjectWriter._configAndWriteValue(ObjectWriter.java:1088)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:909)
    at ms.fragment.JSONTreeGenerator.main(JSONTreeGenerator.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Run Code Online (Sandbox Code Playgroud)

我看到有一个GmlExporter,但我对json感兴趣...我怎么能这样做?

java serialization json jgrapht

12
推荐指数
1
解决办法
689
查看次数

图表的自动布局(JGraphX)

我无法显示具有自动布局的JGraphX.

我的程序(下面的代码)创建一个这样的输出: 在此输入图像描述

一个足够的结果可能看起来像这样(我用手移动它们): 在此输入图像描述

我不必坚持JGraphX.我还测试JUNGJGraphT.但到目前为止,这是我最好的结果.我需要的是我的数据视图,其上有定向的eges和一些标签.

我制作了一个示例代码,展示了它是如何创建的.它类似于http://forum.jgraph.com/questions/4810/how-to-layout-nodes-automatically-using-fast-organic-layout.有一个评论从2012年,提到相同的问题"[...]但是我注意到节点有时重叠,你知道一种方法来解决这个问题,我已经玩了属性,它似乎很随意.一般来说如何改善外观的任何建议?"

public class Test extends JFrame {

        public static void main(String[] args) {
                JFrame f = new JFrame();
                f.setSize(800, 800);
                f.setLocation(300, 200);
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                final mxGraph graph = new mxGraph();

                mxGraphComponent graphComponent = new mxGraphComponent(graph);
                f.getContentPane().add(graphComponent, BorderLayout.CENTER);

                f.setVisible(true);
                Object parent = graph.getDefaultParent();

                graph.getModel().beginUpdate();
                try {
                        Object start = graph.insertVertex(parent, "start", "start", 100,
                                        100, 80, 30);
                        for (int i = 0; i < 10; i++) {
                                Object a = graph.insertVertex(parent, …
Run Code Online (Sandbox Code Playgroud)

java graph jgrapht jung jgraphx

10
推荐指数
1
解决办法
3661
查看次数

JGraphT的例子

我想在一个简单的x,y图上绘制线条,以便使用JGraphTJApplet显示.我找到的例子并不是很有用.有人可以请我指几个简单的JGraphT例子吗?

java jgrapht

8
推荐指数
2
解决办法
2万
查看次数

图论:找到乔丹中心?

我正在尝试找到一组顶点,这些顶点最小化了它们与加权图上其他顶点的距离.基于粗略的维基百科搜索,我认为这被称为约旦中心.有什么好的算法可以找到它?

现在,我的计划是获取从给定顶点发出的每个分支的权重列表.权重具有最小相对差异的顶点将是中心的.还有其他想法吗?

我正在使用Java,但有用的答案不一定需要特定于Java.

java language-agnostic graph-theory jgrapht

7
推荐指数
1
解决办法
3051
查看次数

如何在图的边缘包含重量?

我想使用这个jgrapht接口类在我的图上包含边的权重或成本:

package org.jgrapht;

public interface WeightedGraph<V extends Object, E extends Object> extends Graph<V, E> {

    public static final double DEFAULT_EDGE_WEIGHT = 1.0;

    public void setEdgeWeight(E e, double d);
}
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?谢谢.

java graph-theory graph jgrapht

7
推荐指数
1
解决办法
9903
查看次数

从 jgrapht 中的节点获取所有边

我试图随机遍历 jgrapht 中的图形(直到找到一些目标节点)。为此,我需要从 sourceNode 开始,随机选择任何出来的边缘并跟随它。

我知道有一种方法getAllEdges(sourceVertex, targetVertex)可以返回两个给定节点之间的所有边。但是如何在只有 sourceNode 而没有目标的情况下获得所有边?

java graph jgrapht jgraph

7
推荐指数
1
解决办法
4409
查看次数