zoukankan      html  css  js  c++  java
  • 产生数的全排列(暴力深搜,比STL的快)_模板

    产生数的全排列。速度快,哈,怕超时的时候,试试看。
    #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;
    }
    
    
       
  • 相关阅读:
    透过书本了解HTML5
    Seam性能讨论
    Maven依赖管理
    Tapestry
    为HTML5的未来制定学习计划
    后缀数组
    HDU 1042(大数)
    教你理解复杂的C/C++声明
    编程修养
    平衡二叉树
  • 原文地址:https://www.cnblogs.com/cchun/p/2520164.html
Copyright © 2011-2022 走看看