#温馨提示和上一篇一样
#-1 代表分开的意思,中间有-1代表轮换的乘积
n <- 5
da <- expand.grid(1:n,1:n,1:n,1:n,1:n)
names(da) <- LETTERS[1:n]
f <- function(x)
{
if(length(x) == length(unique(x)))
{
temp1 <- TRUE
}
else
{
temp1 <- FALSE
}
return(temp1)
}
da <- da[apply(da, 1, f),]
da <- as.data.frame(da)
da1 <- as.matrix(arrange(da,A,B,C))
ff <- function(n,second_row)
{
library(dplyr)
if(identical(second_row,1:n))#解决第一个元素
{
return(1)
}
else
{
first_row <- 1:n
Logical_da <- as.logical(first_row - second_row)
first_row <- first_row [Logical_da]
second_row <- second_row[Logical_da]
da <- -1
while(length(first_row)>=2)#控制结束条件
{
re <- c(first_row[1],second_row[1])
#是对换的时候
index <- which(first_row == second_row[1])
while(second_row[index] != first_row[1])
{
re <- c(re,second_row[index])
index <- which(first_row == second_row[index])
}
first_row <- setdiff(first_row,re)
second_row <- setdiff(second_row,re)
da <- c(-1,re,da)
}
return(da)
}
}
n1 <- n
dddd <- vector(mode = "list", factorial(n1))
for (i in 1:factorial(n1))
{
dddd[[i]] <- ff(n1,as.vector(da1[i,]))
}