36 lines
522 B
R
36 lines
522 B
R
next.perm <- function(a) {
|
|
n <- length(a)
|
|
i <- n
|
|
while (i > 1 && a[i - 1] >= a[i]) i <- i - 1
|
|
if (i == 1) {
|
|
NULL
|
|
} else {
|
|
j <- i
|
|
k <- n
|
|
while (j < k) {
|
|
s <- a[j]
|
|
a[j] <- a[k]
|
|
a[k] <- s
|
|
j <- j + 1
|
|
k <- k - 1
|
|
}
|
|
s <- a[i - 1]
|
|
j <- i
|
|
while (a[j] <= s) j <- j + 1
|
|
a[i - 1] <- a[j]
|
|
a[j] <- s
|
|
a
|
|
}
|
|
}
|
|
|
|
perm <- function(n) {
|
|
e <- NULL
|
|
a <- 1:n
|
|
repeat {
|
|
e <- cbind(e, a)
|
|
a <- next.perm(a)
|
|
if (is.null(a)) break
|
|
}
|
|
unname(e)
|
|
}
|