高效的排列生成算法

原创 2007年10月05日 21:07:00

 

 本算法与上一篇的组合生成算法是一体的,也是在维普上看到的。我用C++实现如下:

#include <cstdlib>
#include 
<iostream>
#include 
<iterator>

using namespace std;
      
void  Permutation( int n ){
    
int *A=new int[n+1], *B=new int[n+1], i=0, j;
    
for( j=1; j<=n; ++j )
         A[j]
=j, B[j]=0
    
while( i!=n+1  ){
        copy(A
+1,A+n+1,ostream_iterator<int>(cout," "));  
        cout
<<endl;
        
for( i=2; i<=&& B[i]>=i-1 ; ++i );
        
++B[i];
        
if( i&1 )   swap( A[i], A[1] );
        
else        swap( A[i], A[B[i]] );
        
for( j=1; j<=i-1++j )
            B[j]
=0;
    }

    delete []A;    delete []B;
}

                    
int main(int argc, char *argv[])
    Permutation( 
4 );
    system(
"PAUSE");
    
return EXIT_SUCCESS;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

1到N的整数中,随机选出M个并升序排列的较高效算法

/** * 从1到N的整数中,选出M个,按小到大排序存入数组 * @author rorom * @param n * @param m * @return */ ...
  • rorom
  • rorom
  • 2012-04-25 13:08
  • 335

排列组合的高效算法

1。最近一直在考虑从m个数里面取n个数的算法。最容易理解的就是递归,但是其效率,实在不能使用。一直找寻中,今日得果 2。算法来源与互联网 组合算法      本程序的思路是开一个数组,其...

QT编写的数独游戏及一个准确高效生成算法

QT编写的数独游戏,数独的生成算法、难度选择
  • zj0395
  • zj0395
  • 2017-05-26 19:35
  • 1041

【密码学】生成8位26个字母和数字的全排列(密码字典,密钥)c++代码(非递归高效直接)

生成8位26个字母和数字的全排列(密钥)代码(非递归高效直接) 用C语言或C++,生成一个8位的26个字母和数字的全排列的原代码,例如从:00000000到ZZZZZZZZ。 说明:生成的这个字典会...

N皇后问题的两个最高效的算法

http://blog.csdn.net/hackbuteer1/article/details/6657109         N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每...

A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效

思路1:排序法   对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)),设置两个指针p和q,同时指向集合A和集合B的最小值,不相等的话移动*p和*q中较小值的指针,相等的话同时移...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)