我有这个生成随机图的代码, 如何识别图表中的桥梁和切口
library(igraph)
G <- graph( c(1,2,1,3,1,4,3,4,3,5,5,6,6,7,7,8,8,9,3,8,5,8,10,1,10,2,11,2,12,1,13,4,13,7,14,2,15,6,16,7,17,8,19,13,18,4,19,7), directed = FALSE )
# Assign attributes to the graph
G$name <- "A colorful example graph"
# Assign attributes to the graph's vertices
V(G)$name <- toupper(letters[1:20])
V(G)$color <- sample(rainbow(20),20,replace=FALSE)
# Assign attributes to the edges
E(G)$weight <- runif(length(E(G)),.3,2)
# Plot the graph -- details in the "Drawing graphs" section of the igraph manual
plot(G, layout = layout.fruchterman.reingold,
main = G$name,
vertex.label = V(G)$name,
vertex.size = 15,
vertex.color= V(G)$color,
vertex.frame.color= "white",
vertex.label.color = "white",
vertex.label.family = "sans",
edge.width=E(G)$weight,
edge.color="black")
答案 0 :(得分:4)
好的,鉴于我已经能够根据您的定义使用术语来辨别,这可能是一种让您实现目标的方法。希望它在某种程度上有所帮助,虽然它肯定不是最有效的桥梁寻找算法(迭代去除边缘和计算图形分解),它可以相对较好地适用于小图形。如果您需要更高效的东西,您可能需要手动编写Trajan或其他有效算法:
library(igraph)
G <- graph( c(1,2,1,3,1,4,3,4,3,5,5,6,6,7,7,8,8,9,3,8,5,8,10,1,10,2,11,2,12,1,13,4,13,7,14,2,15,6,16,7,17,8,19,13,18,4,19,7), directed = FALSE )
# Assign attributes to the graph
G$name <- "A graph with articulated.nodes and bridges highlighted"
# Assign attributes to the graph's vertices
V(G)$name <- toupper(letters[1:20])
V(G)$color <- sample(rainbow(20),20,replace=FALSE)
# Assign attributes to the edges
E(G)$weight <- runif(length(E(G)),.3,2)
## Set normal vertices to black:
V(G)$color <- "black"
## Set articulation points to red:
V(G)$color[ articulation.points(G) ] <- "red"
## Set normal edges to black:
E(G)$color <- "black"
## Set bridge edges to red:
num_comp <- length( decompose.graph(G) )
for (i in 1:length(E(G))) {
G_sub <- delete.edges(G, i)
if ( length( decompose.graph(G_sub) ) > num_comp ) E(G)$color[i] <- "red"
}
plot(G, layout = layout.fruchterman.reingold,
main = G$name,
vertex.label = V(G)$name,
vertex.size = 15,
vertex.color= V(G)$color,
vertex.frame.color= "white",
vertex.label.color = "white",
vertex.label.family = "sans",
edge.width=E(G)$weight,
edge.color=E(G)$color)
答案 1 :(得分:0)
似乎没有实施。如上所述here,您可以从函数开始实现Trajan's algorithm以查找生成树:
minimum.spanning.tree
至于剪辑,相同的来源指向与您的不同的定义,但您可能想要查看它。