产生数的全排列。速度快,哈,怕超时的时候,试试看。
#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;
}

   
posted on 2011-11-04 03:13  cchun  阅读(678)  评论(0编辑  收藏  举报