#include
#include
#include
#define SIZE 4
struct Node
{
int r[SIZE];
struct Node *next;
} head = {{0}, NULL}, *current = &head;
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void arrange(int m, int n, int *data)
{
//out put a full arrange
if(m == n)
{
struct Node *node = (struct Node *)malloc(sizeof(struct Node));
memcpy(node->r, data, SIZE * sizeof(int));
current->next = node;
current = node;
}
else
{
int i;
for(i = m; i <= n; i++)
{
swap(&data[m], &data[i]);
arrange(m+1, n, data);
swap(&data[m], &data[i]);
}
}
}
int main() {
int data[SIZE] = {1, 2, 3, 4};
arrange(0, 3, data);
struct Node *p;
int count = 0;
for(p = head.next; p; p = p->next) {
printf("%d%d%d\n", p->r[0], p->r[1], p->r[2]);
count++;
}
printf("numbers: %d\n", count);
return 0;
}