.
, , , . , , , , , .

:
eulerian.g1 <- make.eulerian(g1)$graph
, :
make.eulerian(g1)$info
, :
- , ,
g1, . , , . - , , , . , .
- , , . , node . , , MCMC - .
. :
script, :
library(igraph)
g1 <- graph(c(1,2, 1,3, 2,4, 2,5, 1,5, 3,5, 4,7, 5,7, 5,8, 3,6, 6,8, 6,9, 9,11, 8,11, 8,10, 8,12, 7,10, 10,12, 11,12), directed = FALSE)
connected.erdos.renyi.game <- function(n,m){
graph <- erdos.renyi.game(n,m,"gnm",directed=FALSE)
graph <- delete_vertices(graph, (degree(graph) == 0))
}
g2 <- connected.erdos.renyi.game(n=12, m=16)
make.eulerian <- function(graph){
info <- c("broken" = FALSE, "Added" = 0, "Successfull" = TRUE)
is.even <- function(x){ x %% 2 == 0 }
search.for.even.neighbor <- !is.even(sum(!is.even(degree(graph))))
for(i in V(graph)){
set.j <- NULL
uneven.neighbors <- !is.even(degree(graph, neighbors(graph,i)))
if(!is.even(degree(graph,i))){
if(sum(uneven.neighbors) == 0){
if(sum(!is.even(degree(graph))) > 0){
info["Broken"] <- TRUE
uneven.candidates <- !is.even(degree(graph, V(graph)))
if(sum(uneven.candidates) != 0){
set.j <- V(graph)[uneven.candidates][[1]]
}else{
info["Successfull"] <- FALSE
}
}
}else{
set.j <- neighbors(graph, i)[uneven.neighbors][[1]]
}
}else if(search.for.even.neighbor == TRUE & is.null(set.j)){
info["Added"] <- info["Added"] + 1
set.j <- neighbors(graph, i)[ !uneven.neighbors ][[1]]
if(!is.null(set.j)){search.for.even.neighbor <- FALSE}
}
if(!is.null(set.j)){
if(i != set.j){
graph <- add_edges(graph, edges=c(i, set.j))
info["Added"] <- info["Added"] + 1
}
}
}
(list("graph" = graph, "info" = info))
}
eulerian <- make.eulerian(g1)
eulerian$info
g <- eulerian$graph
par(mfrow=c(1,2))
plot(g1)
plot(g)