#include<assert.h>
#include<iostream>
#include<fstream>
#include<time.h>
#include<stack>
using namespace std;
struct Node
{
int i;
int dept;
Node(int id,int depth)
{
i=id;
dept=depth;
}
};
template<class E>
void permutation(E *arr,int n,ofstream &cout)
{
assert(n>0);
int * count=new int [n];
stack<Node *> myStack;
for(int i=0;i<n;i++)
{
myStack.push(new Node(i,0));
}
int index=0;
int num=0;
while(myStack.empty()==false)
{
Node *now=myStack.top();
myStack.pop();
index=now->dept;
count[index]=now->i;
if(index==n-1)
{
num++;
cout<<"µÚ"<<num<<"ÖÖÅÅÁÐ:"<<endl;
for(int i=0;i<n;i++)
{
cout<<arr[count[i]]<<" ";
}
cout<<endl;
}
for(int i=0;i<n;i++)
{
int j;
for(j=0;j<=index;j++)
{
if(count[j]==i)
break;
}
if(j<=index)
{
}
else
{
myStack.push(new Node(i,index+1));
}
}
}
}
int main()
{
ofstream cout("output.txt");
int n=4;
char *arr=new char[n+1];
for(int i=0;i<=n;i++)
{
arr[i]='a'+i;
}
arr[n]='\0';
permutation<char>(arr,n,cout);
return 0;
}
虽然此程序 ,不可能在可接受的时间内输出全排列,但是却可以在一定的内存条件,无限的时间下得到全排列。