2014-12-23 53 views
1

我試圖用一些任意大小繪製一個完整的圖。然後,我想修剪每個頂點可以具有的相鄰邊的數量。我怎樣才能做到這一點?作爲一個例子,如果我有一個包含20個頂點的完整圖,那麼每個頂點最初將有19個相鄰的邊。現在我想修剪那些邊緣,使每個頂點至多有10個邊緣。在igraph中設置頂點的相鄰邊的上限

編輯

下面是當前的代碼我已經爲這個寫的。它傾向於形成斷開的頂點和連接頂點的小羣集。

library(igraph) 
node_number = 20 
g=erdos.renyi.game(node_number, 1) 

testfun = function(g, maxVert, node_number){ 
    neighbor_nodes = NULL; delete_edge = NULL; delete_these = NULL 
    total_nodes = 1:node_number 

    for (i in 1:node_number){ 
    neighbor_nodes <- unlist(neighborhood(g, order = 1, nodes = total_nodes[i])) 
    neighbor_nodes[1] <- NA 
    neighbor_nodes <- neighbor_nodes[!is.na(neighbor_nodes)] 
    neighbor_nodes <- sample(neighbor_nodes, maxVert) 

    delete_edge <- which(total_nodes%in%neighbor_nodes == FALSE) 
    delete_edge <- which(delete_edge%in%total_nodes[i] == FALSE) 

    for (j in 1:length(delete_edge)){ 
     if (isTRUE(edgeFinder(g, total_nodes[i], delete_edge[j]))){ 
     g = delete.edges(g, E(g, P=c(i, delete_edge[j]))) 
     } 
    } 
    } 
    return(g) 
} 

edgeFinder = function(g, v1,v2){ 
    if (g[v1,v2] == 1){ 
    return(TRUE) 
    } else { return(FALSE) } 
} 

g2 = testfun(g, 10, node_number) 
+0

我認爲你需要提供更多信息。例如,是否有與邊緣相關的優先級?可以嗎,如果您將某些頂點的邊減少到小於10?你需要一個最佳的解決方案嗎?或者是一個啓發式足夠?您還應該就如何解決問題提出自己的初步想法。這表明你做了一些研究工作。目前你的問題似乎過於寬泛。 – honk

+0

@honk沒有與邊緣相關的優先級。如果每個頂點都有可以自己設置的相鄰邊的最大數量,那將是理想的。我確實想出了自己的解決方案,但它並不按照我想要的方式工作,因爲它會耗盡大多數頂點的邊緣,而少數邊緣仍然存在邊緣。我將編輯我的帖子以分享我的當前代碼。 – user3141121

回答

2

我能夠使用以下方法解決此問題。

library(igraph)  

SetEdge = rep(10, 20) 
g=degree.sequence.game(SetEdge, method='vl')  
degree(g) 
[1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 

我現在繪製了一個包含10個相鄰邊的20個頂點的圖。比我最初的方法更簡單...

相關問題