[英]How to Partition a graph into possibly overlapping parts such that any vertex contained in a part has at least distance k from the Boundary?
[英]Partition a graph by vertex label
我正在解决一个问题,该问题需要将有向标记图划分为几个子图。 在每个子图中,节点是连接的,并且它们具有相同的标签。 有解决这个问题的有效算法吗?
这是我用Java实现的解决方案,它使用JGraphT作为图形库。
private Set<Set<Node>> partition(DirectedGraph<Node, Edge> graph) {
Map<Node, Set<Node>> map = new HashMap<Node, Set<Node>>();
for (Edge edge : graph.edgeSet()) {
Node source = graph.getEdgeSource(edge);
Node target = graph.getEdgeTarget(edge);
if (source.getLabel().equals(target.getLabel())) {
if (map.get(source) != null && map.get(target) == null) {
map.get(source).add(target);
map.put(target, map.get(source));
} else if (map.get(target) != null && map.get(source) == null) {
map.get(target).add(source);
map.put(source, map.get(target));
} else if (map.get(source) == null && map.get(target) == null) {
Set<Node> set = new HashSet<Node>();
set.add(source);
set.add(target);
map.put(source, set);
map.put(target, set);
} else {
Set<Node> sourceSet = map.get(source);
Set<Node> targetSet = map.get(target);
sourceSet.addAll(targetSet);
for(Node n : targetSet){
map.put(n,sourceSet);
}
targetSet = null;
}
} else {
if (map.get(source) == null) {
Set<Node> set = new HashSet<Node>();
set.add(source);
map.put(source, set);
}
if (map.get(target) == null) {
Set<Node> set = new HashSet<Node>();
set.add(target);
map.put(target, set);
}
}
Collection<Set<Node>> values = map.values();
}
return new HashSet<Set<Node>>(map.values());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.