/* ------------------------------------------------------ */
/* PROGRAM permutation by rotation : */
/* Give an integer n, this program generates all */
/* possible permutations by using rotation operations. */
/* */
/* Copyright Ching-Kuang Shene July/08/1989 */
/* ------------------------------------------------------ */
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define ROTATE(p) { int i, temp; \
temp = perm[p]; \
for (i = p-1; i >= 0; i--) \
perm[i+1] = perm[i]; \
perm[0] = temp; \
}
void main(void)
{
int perm[MAXSIZE];
int position;
int n;
int i;
char line[100];
printf("\nPermutation by Rotation Method");
printf("\n==============================");
printf("\n\nNumber of Elements --> ");
gets(line);
n = atoi(line);
for (i = 0; i < n; i++) /* initialize to 1,2,...,n */
perm[i] = i + 1;
position = n - 1;
while (position != 0) { /* if still have positions..*/
printf("\n"); /* display result */
for (i = 0; i < n; i++)
printf("%d ", perm[i]);
position = n - 1; /* starts from the last pos */
ROTATE(position); /* rotate them. */
while (perm[position]==position+1 && position!=0) {
position--; /* if last pos are equal and*/
ROTATE(position); /* not zero, rotate again*/
}
}
}
评论