我有兴趣使用jgrapht提供的各种类型的有向和无向图类来编写图着色算法。他们似乎没有一个简单的能力在图类本身内执行此操作(例如DirectedSimpleGraph)。
我的目标是能够遍历图形对象,并向顶点添加/更改各种标签或颜色,而无需将顶点信息存储在对象本身之外 - 即我想使用或创建诸如此类的方法作为“DirectedSimpleGraph.setColorToVertex(v,c),其中v是一个顶点.c是可能被定义为整数的颜色。任何线索或最佳实践建议都将非常感激。
答案 0 :(得分:1)
能够对顶点进行着色或标注的典型方法是将自己的Vertex类提供给存储所需内容的jgrapht。例如,
ar = map(int, raw_input().split())
print ar
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newarray=ar[0:6]
print newarray
#[1, 2, 3, 4, 5, 6]
这样,您不需要使用外部机制(例如哈希映射)来跟踪顶点颜色/标签。
答案 1 :(得分:0)
看起来像jgrapht库https://github.com/jgrapht/jgrapht 正在积极发展中。也许你可以联系开发者? 有关详细信息,请查看github链接的自述文件。
您可以扩展库中的抽象类以添加自定义字段&你想要的功能。
答案 2 :(得分:0)
我想使用或创建诸如“ DirectedSimpleGraph.setColorToVertex(v,c)的方法,其中v是一个顶点
图形作为数据结构没有颜色的概念。只有图形的视觉表示才可以。
因此,您可以使用DOTExporter
之类的东西通过多种方式更改图形,包括为边缘和顶点着色:
public void printGraph(Graph<GraphNode, DefaultEdge> graph) {
PrintWriter writer = new PrintWriter(System.out);
DOTExporter exp = new DOTExporter<>(
new NodeIdProvider(),
new NodeLabelProvider(),
new StringEdgeNameProvider<DefaultEdge>(),
new NodeAttributeProvider(),
new EdgeAttributeProvider());
exp.exportGraph(graph, writer);
}
NodeAttributeProvider
打印每个节点:
public class NodeAttributeProvider implements ComponentAttributeProvider<GraphNode>
{
@Override
public Map<String, String> getComponentAttributes(GraphNode component) {
Map<String, String> attrs = new HashMap<>();
attrs.put("style", "filled");
attrs.put("fillcolor", component.getFillColor());
return attrs;
}
}
您的工作就是实现接口GraphNode
及其方法getFillColor()
。