graph - 如何使用jgrapht修剪给定距离K的图?
问题描述
我使用 jgrapht API 构建了一个图表。我有一个有向图。给定一个节点N,我必须创建一个包含所有距离为K的连接邻居的子图。
所以基本上给定一个节点和距离 K,我必须修剪图形,以便只保留距离 K 的连接节点。
我有一个想法来手动实现它。
- 我可以从节点列表中生成所有对之间的最短路径。
- 之后,我可以摆脱距离 K 之外的节点。
但是,这会导致所有节点之间的比较,想知道是否有更好的方法来做到这一点?
此外,想知道 jgrapht 已经有一个 API 可以做到这一点。
(我已经查看了 jgrapht 的 API,但没有找到任何这样的 API)
解决方案
我假设它distance
被定义为加权图中最短路径的长度,其中路径的长度由其边权重的总和给出。我还假设只要求所有邻居都在maxDistance
输入 vertex的给定范围内N
,并且不需要其中两个邻居也必须在maxDistance
彼此内。
最简单的方法包括:
- 对于给定的输入顶点
N
,确定最多maxDistance
远离 的所有顶点N
。 - 返回一个诱导子图,
N
加上它的(间接)邻居,最多为maxDistance
单位。
public <V,E> Graph<V, E> getSubgraph(Graph<V,E> graph, V source, double maxDistance){
//Compute a shortest. Optionally we can limit the search to vertices that are maxDistance away
DijkstraShortestPath<V,E> ds = new DijkstraShortestPath<>(graph, maxDistance);
ShortestPathAlgorithm.SingleSourcePaths<V, E> shortestPaths = ds.getPaths(source);
//Collect all neighboring vertices that are at most maxDistance units away
Set<V> neighbors = graph.vertexSet().stream().filter(v -> shortestPaths.getWeight(v) <= maxDistance).collect(Collectors.toSet());
//Return an induced subgraph on those vertices
return new AsSubgraph<>(graph, neighbors);
}
推荐阅读
- ruby-on-rails - 失败/错误:let(:completed_task) { Task.create!(completed_at: 1.day.ago, size: 1) }
- flutter - Flutter:Firebase Analytics 与 null 安全性不兼容
- python - 在 Python Plotly Choropleth Map 下方添加标题
- magento - 从 Magento 1.9 到 Magento 2.4 的数据迁移过程中出现错误
- python - 我的 python 代码没有运行,也没有显示任何错误
- swift - 不能对不可变值使用变异成员:“父”是“让”常量?
- awk - 如何从语句中提取内容?
- java - oracle中外键的外键
- python - 如何使用多行创建 tkinter 输入框
- javascript - ERROR 错误:Angular JIT 编译失败:'@angular/compiler' 未加载