- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我看到了 jgraph 和 jgrapht 的示例,很容易理解,但现在确定我将如何使用 CompleteBipartiteGraph?如何使用语法来实例化图表?
http://jgrapht.org/javadoc/org/jgrapht/generate/CompleteBipartiteGraphGenerator.html
最佳答案
针对评论中的问题“我还能使用这个生成器吗?”:您仍然可以使用它来创建完整的二分图,然后随机删除一些边。
但更直接的方法是简单地生成两组顶点并在它们之间插入一些随机边。事实上,这如此简单,以至于我不得不假设还有一些您到目前为止没有提到的其他约束。我插入了另一种方法,确保二分图不包含孤立的顶点(我的 Crystal 球告诉我要这样做......)
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.jgrapht.Graph;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.VertexFactory;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class BipartiteGraphTest
{
public static void main(String[] args)
{
UndirectedGraph<String, DefaultEdge> graph =
new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);
VertexFactory<String> vertexFactory = new VertexFactory<String>()
{
int n = 0;
@Override
public String createVertex()
{
String s = String.valueOf(n);
n++;
return s;
}
};
int numVertices0 = 10;
int numVertices1 = 15;
int numEdges = 20;
generateGraph(graph, numVertices0, numVertices1, numEdges, vertexFactory);
System.out.println(graph);
}
// Creates a bipartite graph with the given numbers
// of vertices and edges
public static <V, E> void generateGraph(Graph<V, E> graph,
int numVertices0, int numVertices1, int numEdges,
final VertexFactory<V> vertexFactory)
{
List<V> vertices0 = new ArrayList<V>();
for (int i = 0; i < numVertices0; i++)
{
V v = vertexFactory.createVertex();
graph.addVertex(v);
vertices0.add(v);
}
List<V> vertices1 = new ArrayList<V>();
for (int i = 0; i < numVertices1; i++)
{
V v = vertexFactory.createVertex();
graph.addVertex(v);
vertices1.add(v);
}
// Create edges between random vertices
Random random = new Random(0);
while (graph.edgeSet().size() < numEdges)
{
int i1 = random.nextInt(vertices1.size());
V v1 = vertices1.get(i1);
int i0 = random.nextInt(vertices0.size());
V v0 = vertices0.get(i0);
graph.addEdge(v0, v1);
}
}
// Creates a bipartite graph with the given numbers
// of vertices and edges without isolated vertices
public static <V, E> void generateGraphNoIsolatedVertices(
Graph<V, E> graph, int numVertices0, int numVertices1, int numEdges,
final VertexFactory<V> vertexFactory,
List<V> vertices0, List<V> vertices1)
{
int minNumEdges = Math.max(numVertices0, numVertices0);
if (numEdges < minNumEdges)
{
System.out.println("At least " + minNumEdges + " are required to " +
"connect each of the " + numVertices0 + " vertices " +
"to any of the " + numVertices1 + " vertices");
numEdges = minNumEdges;
}
for (int i = 0; i < numVertices0; i++)
{
V v = vertexFactory.createVertex();
graph.addVertex(v);
vertices0.add(v);
}
for (int i = 0; i < numVertices1; i++)
{
V v = vertexFactory.createVertex();
graph.addVertex(v);
vertices1.add(v);
}
// Connect each vertex of the larger set with
// a random vertex of the smaller set
Random random = new Random(0);
List<V> larger = null;
List<V> smaller = null;
if (numVertices0 > numVertices1)
{
larger = new ArrayList<V>(vertices0);
smaller = new ArrayList<V>(vertices1);
}
else
{
larger = new ArrayList<V>(vertices1);
smaller = new ArrayList<V>(vertices0);
}
List<V> unmatched = new ArrayList<V>(smaller);
for (V vL : larger)
{
int i = random.nextInt(unmatched.size());
V vS = unmatched.get(i);
unmatched.remove(i);
if (unmatched.size() == 0)
{
unmatched = new ArrayList<V>(smaller);
}
graph.addEdge(vL, vS);
}
// Create the remaining edges between random vertices
while (graph.edgeSet().size() < numEdges)
{
int i0 = random.nextInt(vertices0.size());
V v0 = vertices0.get(i0);
int i1 = random.nextInt(vertices1.size());
V v1 = vertices1.get(i1);
graph.addEdge(v0, v1);
}
}
}
关于Java JGrapht 二分图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22669614/
在 jgrapht 中,我添加了一些顶点。 我想知道如何获取我已添加或已存在于 jgrapht 中的所有顶点? 有办法得到吗? 最佳答案 这将给出图中的所有顶点。 DefaultDirectedGra
在 jgrapht 中,我添加了一些顶点。 我想知道如何获取我已添加或已存在于 jgrapht 中的所有顶点? 有办法得到吗? 最佳答案 这将给出图中的所有顶点。 DefaultDirectedGra
我正在 jgrapht 中寻找一个允许我构建图表的类动态地并在运行时在给定图中生成新边 基于算法分支的时间。 我需要实现分支定界算法 我看到这个类ListenableDirectedWeightedG
方法 getSource()和 getTarget() org.jgrapht.graph.DefaultEdge 上的 DefaultEdge 受到保护。 我应该如何访问 edgeSet() 返回的
SimpleWeightedGraph g = new SimpleWeightedGraph<>(DefaultWeightedEdge.class); String v1 = "v1";
我正在构建一个关于图论算法的项目,为此我使用 JGraphT .我已经完全构建了我的图表,并且在过去的几个月里我一直在研究它。现在我想导出它,以便在 Gephi 中可视化它。我不想使用 JGraph
我有一个问题,本质上可以看作是一个图表。我正在考虑使用 JGraphT 来实现它,而不是自己动手。使用 JGraphT 从图中获取最小生成树的最佳方法是什么? 最佳答案 不幸的是,我不知道足够的图论来
除了我正在使用的 JGraphT (Java) 库之外,我还是图论新手,以便实现我正在尝试解决的物流问题的解决方案。因此,我对解决这个问题的最佳方法有点迷失,我必须在给定传入数据的情况下表示 carg
假设我有以下两个树形图: a i / \ / \ b
我正在使用SimpleDirectedWeightedGraph来自JGrapghT 1.2.0图书馆。我的目标是在顶点 A 之间创建两条边和B这样A B 。如果我这样做: graph.addEdg
我正在尝试遍历所有节点,因此我可以将它们打印出来用于 graphviz。使用 JGraphT 库执行此操作的最佳方法是什么? public static void main(String[] args
我有制作无向图的代码: UndirectedGraph g = new SimpleGraph(DefaultEdge.class); g.addVertex("1"); g.addVertex("2
我使用以下方法创建了一个有向图: public static DirectedGraph directedGraph = new DefaultDirectedGraph(DefaultEdg
以下是使用 Dijkstra 算法查找最短路径的示例代码: public static void main(String args[]) { SimpleDirectedWeightedGra
我使用 JGraphT 构建了以下图表 A->B graph = new DirectedPseudograph<>(Edge.class); DijkstraShortestPath sho
我有一个简单的无向图 G = (V, E)。给定一个节点 n,是否有一种简单的方法可以找到它的所有邻居,即所有节点 m,使得 {n, m} 在 E? 有 edgesOf 方法,它返回连接到给定节点的所
我想使用 JGraphT 库制作图形。我的代码如下: private UndirectedGraph graph; private HashMap vertixList; public MapGra
希望你一切顺利!我正在尝试编写一个程序,在该程序中我需要创建一个动态加权图并获得从一个顶点到另一个顶点的最短路径。但运行程序后我得到这个异常: run: TEST1 TEST Vertex Add E
我看到了 jgraph 和 jgrapht 的示例,很容易理解,但现在确定我将如何使用 CompleteBipartiteGraph?如何使用语法来实例化图表? http://jgrapht.org/
JGraphT有许多最短路径的实现(Dijkstra、Belman Ford 等) 我需要一个未加权图的单源最短路径。 这是我的问题(特定于 JGraphT): 首先,我假设对未加权的图使用 Dijk
我是一名优秀的程序员,十分优秀!