如何使用jgrapht库标记或着色顶点?

时间:2015-08-06 16:31:37

标签: java vertex jgrapht labeling graph-coloring

我有兴趣使用jgrapht提供的各种类型的有向和无向图类来编写图着色算法。他们似乎没有一个简单的能力在图类本身内执行此操作(例如DirectedSimpleGraph)。

我的目标是能够遍历图形对象,并向顶点添加/更改各种标签或颜色,而无需将顶点信息存储在对象本身之外 - 即我想使用或创建诸如此类的方法作为“DirectedSimpleGraph.setColorToVertex(v,c),其中v是一个顶点.c是可能被定义为整数的颜色。任何线索或最佳实践建议都将非常感激。

3 个答案:

答案 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()