产生数的全排列。速度快,哈,怕超时的时候,试试看。
#include
#include
int a[1001];
int m;
void f1(int visited[],int y)
{
int i;
if(y==m+1)//输出函数,历遍一组,输出一组
{
/*
要用到全排列的,可以在这里操作
*/
for(i=1;i<=m-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
else//类似于深度优先遍历的思想输出
{
for(i=1;i<=m;i++)
{
if(visited[i]==0)
{
a[y]=i;
visited[i]=1;//标记
f1(visited,y+1);//递归
visited[i]=0;
}
}
}
}
int main()
{
int l;
int temp[1001];
while(scanf("%d",&m)!=EOF)
{
for(l=1;l<=m;l++)//先确定首位的输出
{
memset(temp,0,sizeof(temp));//对于每次的输出给对应的数组初始化
memset(a,0,sizeof(a));
a[1]=l;
temp[l]=1;
f1(temp,2);//temp数组用于做判断标记,由于首位已经确定,因此输出的对应为从2开始
}
}
return 0;
}