Zuordnung <- function(m,n,p) return(matrix(rbinom(m*n,1,p),n,m)) Tiefensuche <- function(matrix,position) { matrix$value[position[1], position[2]] <- 0 # besucht markieren if(dim(matrix$value)[2] == position[2]) { return(TRUE) } else { rechts <- position[2]+1 links <- position[2]-1 unten <- position[1]+1 oben <- position[1]-1 if(rechts <= dim(matrix$value)[2]) { if(matrix$value[position[1],rechts]) { # Sollte immer passen, da schon geprueft if(Tiefensuche(matrix, c(position[1],rechts))) return(TRUE) } } if(links >= 1) { if(matrix$value[position[1],links]) { if(Tiefensuche(matrix, c(position[1],links))) return(TRUE) } } if(unten <= dim(matrix$value)[1]) { if(matrix$value[unten,position[2]]) { if(Tiefensuche(matrix, c(unten,position[2]))) return(TRUE) } } if(oben >= 1) { if(matrix$value[oben,position[2]]) { if(Tiefensuche(matrix, c(oben,position[2]))) return(TRUE) } } return(FALSE) } } Verbunden <- function(a) { besucht <- newPointer(a) for(i in 1:dim(besucht$value)[1]) { # Jeden Startpunkt nutzen, falls 1 if(besucht$value[i,1]) { if(Tiefensuche(besucht,c(i,1))) return(TRUE) } } return(FALSE) } RelativeHaeufigkeit <- function(m,n,p,b) { return(mean(replicate(b,Verbunden(Zuordnung(m,n,p))))) } # Hilfsfunktion, nicht selbst erstellt newPointer <- function(inputValue){ object <- new.env(parent=globalenv()) object$value <- inputValue class(object) <- 'pointer' return(object) } Werte1bis10 <- function(nm, b) { p <- c(1:10)/10 ergebnis <- c(1:10) for(i in c(1:10)) ergebnis[i] <- RelativeHaeufigkeit(nm,nm,p[i],b) return(ergebnis) }