# Calculating permutaions.

1. Jul 6, 2007

### MathematicalPhysicist

i need to write functions that gives back the permutation of an integer.
i have already the factorial function in, so here what i did so far:
i can assume that MAXCOL is 7, you can assume that n<=7.
Code (Text):

int perm(int n)
{
MAXROW=fact(MAXCOL);
int perms[MAXROW][MAXCOL], i,j;
for(j=0;j<n;j++){
for(i=0;i<fact(n);i++){
perms[i][j]=j+1;
}
}

so far as you can see im printing the list order i.e if n=2
then
Code (Text):

12
12

now i want to be able to unchange the first line and then go to the second line and change it, and then change the third line that it wouldn't be identical to formers, and so forth.
the problem i don't know how to implement it, obviously some sorting is in place but which?

2. Jul 6, 2007

### NateTG

You want to make a list of all permutations of n integers?

It's not very efficient, but you could use an approach of rotating the first n objects:
Code (Text):

int * cycle (int *numbers, int n) {
int tmp,i;

tmp=numbers[0];
for(i=0;i<n-1;i++) {
numbers[i]=numbers[i+1];
}
numbers[i]=tmp;
return numbers;
}

/*These are global so that they're static */
int permindex=0;
int permutations[ROWS][COLS]

void add_permutation (int *permutation) {
int i;
for(i=0;i<MAXCOLS;i++) {
permutations[permindex][i]=permutation[i];
}
permindex++;
}

int *permute (int *numbers, int n) {
int i;

if(1==n) {
} else {
for(i=0;i<n;i++) {
numbers=cycle(numbers,n);
permute(numbers,n-1);
}
}
}

int main {
int i;
int numbers[MAXCOLS];

for(i=0;i<MAXCOLS;i++) {
numbers[i]=i;
}
permute(numbers,MAXCOLS);
}

3. Jul 6, 2007