我试图随机遍历 jgrapht 中的图形(直到找到一些目标节点)。为此,我需要从 sourceNode 开始,随机选择任何出来的边缘并跟随它。
我知道有一种方法getAllEdges(sourceVertex, targetVertex)可以返回两个给定节点之间的所有边。但是如何在只有 sourceNode 而没有目标的情况下获得所有边?
我已经实现了这个图:
ListenableDirectedWeightedGraph<String, MyWeightedEdge> g =
new ListenableDirectedWeightedGraph<String, MyWeightedEdge>(MyWeightedEdge.class);
Run Code Online (Sandbox Code Playgroud)
为了表明班级名称的内容; 一个简单的可听的定向加权图.我想改变边缘的标签而不是格式
return "(" + source + " : " + target + ")";
Run Code Online (Sandbox Code Playgroud)
我希望它能显示边缘的重量.我意识到节点上的所有动作,例如getEdgesWeight()方法,都是从图形而不是边缘委托的.如何显示边缘的重量?我是否必须以某种方式将图表传递到边缘?
任何帮助表示赞赏.
我尝试创建一个带有权重的 Java JGraphT 可视化,例如:

现在我想将边缘标签(例如:(a:b)更改为其边缘重量(例如:2)。我尝试在Javadoc中搜索但没有看到任何内容。请帮助我谢谢!
我需要复制一个简单的图表。
我在图形生成器中没有看到图形复制器,并且 UndirectedGraph 没有实现克隆方法。
那一年,我可以用手抄一张图。但我想用一行来做这件事。
我正在试验JGraphT并试图使用JGraphT API实现深度优先搜索.我创建了一个包含节点和顶点的简单图形,如下所示:
DirectedGraph <Integer, DefaultEdge> graph = new
DefaultDirectedGraph <Integer, DefaultEdge>(DefaultEdge.class);
graph.addVertex(7);
graph.addVertex(4);
graph.addVertex(9);
graph.addVertex(3);
graph.addVertex(2);
graph.addVertex(5);
graph.addEdge(7, 4);
graph.addEdge(7, 9);
graph.addEdge(9, 3);
graph.addEdge(3, 2);
graph.addEdge(3, 5);
Run Code Online (Sandbox Code Playgroud)
我如何使用DepthFirstSearchIterator在此图表上运行DFS?亲切的问候
考虑有向图,如下所示:

其中,(A)最初,实体黑边被断言:
然后(B)计算传递闭包以添加以下(虚线)边:
对于最终图形中的任何顶点,如何有效地计算某些边缘可访问的"直接"邻居,这些邻居无法通过不同的更长路径访问?我想要的输出显示在(A)中.我没有区分断言(粗体)或推断(虚线)的边缘.
这个问题是否有一个众所周知的名称,有没有一种直接的方法来实现这个JGraphT?
思考:
也许这可以通过使用拓扑排序的顶点来实现,例如TS = [0,1,3,4,2].
for(i=0, i<TS.len; i++) {
var v0 = TS[i]
for (j=i+1; i<TS.len; j++) {
var v1 = TS[j]
if (edge exists v0 -> v1) {
var otherPath = false
for (k=i+1; k<j; k++) {
var v2 = TS[k]
if (path exists v0 -> v2 && path exists v2 -> v1) {
otherPath = true
break
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Jgrapht库,但它需要lambda ...
这是我的代码:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
jcenter()
}
dependencies {
classpath "gradle.plugin.me.tatarka:gradle-retrolambda:3.3.0"
classpath 'com.android.tools.build:gradle:2.2.1'
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)
而且:app
apply plugin: "me.tatarka.retrolambda" version "3.3.0"
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "24.0.3"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "it.univpm.gruppoids.iotforemergencyandnavigation"
minSdkVersion 16
targetSdkVersion …Run Code Online (Sandbox Code Playgroud) 描述
该问题的目的是实现一个接口,该接口将根据任务的依赖关系信息对任务列表进行排序。例如,如果任务 A 依赖于任务 B 和 C,则这意味着要开始处理任务 A,必须首先完成任务 B 和 C。我认为它应该像有向图结构。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* The task class represents a certain activities that must be done as the part of the project planning
*/
class Task {
/**
* Unique name of the activity
*/
private String name;
/**
* A list of names of the activities that must be completed in order to be able to start the current activity
*/
private List<String> predecessors;
public …Run Code Online (Sandbox Code Playgroud) 我正在使用JGraphT,我有两个DirectedGraph:g1和g2.
我该如何合并g1和g2第三图形g3?我需要g3是一个普通的图形,并能够添加新的边和顶点.
我想定义一个自定义边
public class Connection extends DefaultWeightedEdge
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用时,super()这可能吗?创建图形时应为EdgeFactory使用什么?
new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);
Run Code Online (Sandbox Code Playgroud)
这样就足够了吗?还是我应该创建一个新的扩展类EdgeFactory?