程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 一種生成排列的簡單想法

一種生成排列的簡單想法

編輯:C++入門知識

 對於生成n個數的排列,我們大家肯定都知道一種回朔的解法,這種解法就是根據8皇後得來的,當然,需要把沖突條件改一下就行.然而,我們現在要提的是另外一種方法,就是通過定義去寫的一種算法.

        顯然,1的排列就是1;1,2的排列有1,2和2,1兩個;現在我們考慮1,2,3這三個數的排列,顯然,1,2,3這三個數的排列其實就是分以下三種情況:

      1)把1放在第1位,剩下的就是2,3的兩個數排列

      2)把2放在第1位,剩下的就是1,3兩個數排列

      3)把3放在第1位,剩下的就是1,2兩個數的排列

        這種思想其實就是我們通常寫出n個數的排列的一種思考過程,當然,對於n個數我們也可以考慮分成n種情況,與上面的類似而已.

這種算法實現起來非常簡單,代碼如下:


[cpp]
#include <iostream>  
using namespace std; 
 
void permutation(int* array, int iLength, int iCurStep); 
 
 
int main(){ 
    int array[] = {1,2,3,4}; 
    permutation(array, 4, 0); 

 
void permutation(int* array, int iLength, int iCurStep){ 
    if(iLength == iCurStep){ 
        for(int i = 0; i< iLength; ++i){ 
            cout<<array[i]<<' '; 
        } 
        cout<<endl; 
        return; 
    } 
    for(int i= iCurStep; i< iLength; ++i){ 
        swap(array[i], *array); 
        permutation(array, iLength, iCurStep+1); 
        swap(array[i], *array); 
    } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved