给定某属于1-9的正数n,按递增顺序打印出所有排列。如:n=3,则顺序打印出123, 132, 213, 231, 312, 321。
#include <iostream>
using namespace std;
struct node
{
int value;
node *prev;
node *next;
};
void print(const node * const head, node *curr)
{
if (NULL == curr)
{
node *p = head->next;
while (p != NULL)
{
cout << p->value;
p = p->next;
}
cout << endl;
return;
}
node *p = curr;
node *q = NULL;
while (p != NULL)
{
if (p != curr)
{
q = p->prev;
p->prev->next = p->next;
if (p->next != NULL)
{
p->next->prev = p->prev;
}
p->prev = curr->prev;
p->next = curr;
curr->prev->next = p;
curr->prev = p;
}
print(head, p->next);
if (p != curr)
{
curr->prev = p->prev;
p->prev->next = curr;
p->next = q->next;
p->prev = q;
q->next = p;
if (p->next != NULL)
{
p->next->prev = p;
}
}
p = p->next;
}
}
void printAll(int n)
{
node *buf = new node[n+1];
buf[0].prev = NULL;
for (int i = 0; i < n; i++)
{
buf[i].value = i;
buf[i].next = &buf[i+1];
buf[i+1].prev = &buf[i];
}
buf[n].value = n;
buf[n].next = NULL;
node *head = &buf[0];
print(head, head->next);
delete []buf;
}