使用igraph /网络软件包,如何确定网络是否已完全连接(每个顶点可以某种方式互相到达顶点)

时间:2019-08-09 20:21:40

标签: r igraph

我有一张进/出港航班和旅行时间的表格。我需要确定飞行网络是否“完全连接”,这意味着您可以以某种方式从每个城市到达每个其他城市。乘坐多少次航班(无论是直接航班还是多次航班)都没有关系。

共有约58个飞行位置,约438个不同的组合(不确定是否重要)。这是数据示例:

╔═════════╦══════════╦═════════╗
║ Inbound ║ Outbound ║ Minutes ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ ATL      ║     102 ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ FLL      ║     136 ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ MCO      ║     122 ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ MYR      ║      90 ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ RSW      ║     137 ║
╠═════════╬══════════╬═════════╣
║ ACY     ║ TPA      ║     129 ║
╠═════════╬══════════╬═════════╣
║ ATL     ║ ACY      ║     102 ║
╠═════════╬══════════╬═════════╣
║ ATL     ║ BOS      ║     132 ║
╚═════════╩══════════╩═════════╝

这是我到目前为止设置的:

data <- read.table(file="filename.txt", header=TRUE, sep = "\t")
colnames(data) <- c("Inbound", "Outbound", "Minutes")

# Make a directed igraph object from inbound/outbound columns
graph <- graph_from_data_frame(data[, c("Inbound", "Outbound")], directed=TRUE,vertices=NULL)

# Make an edgelist from the igraph object
edgelist <- as_edgelist(graph, names=T)

# Make network object from edgelist
network <- as.network(edgelist)

# Use Minutes as weight for edges
E(graph)$weight <- data$Minutes

然后(我认为),我的代码可以正确获取从每个城市到每个其他城市的最短路径:

shortestPaths <- do.call(c, lapply(V(graph), function(v) get.shortest.paths(graph,v,V(graph), weights=weights, output='epath')$epath))

但是我如何找到仅靠航班无法到达的成对机场?(因为,没有直接/中转航班可以将它们连接起来)


编辑 因此,我取得了一些进步,但这并不是我所需要的100%。

使用此代码,我可以获得每条路径(从一个城市到另一个城市)的总时间:

shortestPathsTimes <- do.call(c, lapply(V(graph),
  function(v) shortest.paths(graph,v,V(graph),
  weights=weights)))

我添加了几条没有任何共享入站/出站的伪造行。我发现,只要未连接路径,以上代码都会返回“ inf”。所以用这个:

noPath <- shortestPathsTimes[which(is.infinite(shortestPathsTimes))]

返回这样的输出(基本上每个位置都有2个Inf,我创建的2个伪位置中的每个都有一个)。

+===============================================================================+
| ACY59 ACY60  ATL59 ATL60  AUA59 AUA60  AXM59 AXM60  BDL59 BDL60  BOG59 BOG60  |
+===============================================================================+
| Inf  Inf  Inf  Inf  Inf  Inf  Inf  Inf  Inf  Inf  Inf  Inf                    |
+-------------------------------------------------------------------------------+

但是,我需要的是显示的实际文本路径,例如get.shortest.paths的输出方式。因此,例如,我需要它仅返回类似ACY => TESTIN,ACY => TESTOUT,ATL => TESTIN,ATL => TESTOUT之类的内容。

0 个答案:

没有答案
相关问题