最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全排列算法的原理和實(shí)現(xiàn)代碼

 更新時(shí)間:2014年08月28日 10:20:01   投稿:junjie  
這篇文章主要介紹了全排列算法的原理和實(shí)現(xiàn)代碼,全排列是將一組數(shù)按一定順序進(jìn)行排列,如果這組數(shù)有n個(gè),那么全排列數(shù)為n!個(gè),需要的朋友可以參考下

全排列是將一組數(shù)按一定順序進(jìn)行排列,如果這組數(shù)有n個(gè),那么全排列數(shù)為n!個(gè)?,F(xiàn)以{1, 2, 3, 4, 5}為例說明如何編寫全排列的遞歸算法。

1、首先看最后兩個(gè)數(shù)4, 5。 它們的全排列為4 5和5 4, 即以4開頭的5的全排列和以5開頭的4的全排列。

由于一個(gè)數(shù)的全排列就是其本身,從而得到以上結(jié)果。

2、再看后三個(gè)數(shù)3, 4, 5。它們的全排列為3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六組數(shù)。

即以3開頭的和4,5的全排列的組合、以4開頭的和3,5的全排列的組合和以5開頭的和3,4的全排列的組合.

從而可以推斷,設(shè)一組數(shù)p = {r1, r2, r3, ... ,rn}, 全排列為perm(p),pn = p - {rn}。

因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。當(dāng)n = 1時(shí)perm(p} = r1。

為了更容易理解,將整組數(shù)中的所有的數(shù)分別與第一個(gè)數(shù)交換,這樣就總是在處理后n-1個(gè)數(shù)的全排列。

算法如下:

#include <stdio.h> 

int n = 0; 

void swap(int *a, int *b) 
{   
  int m;   
  m = *a;   
  *a = *b;   
  *b = m; 
} 
void perm(int list[], int k, int m) 
{   
  int i;   
  if(k > m)   
  {     
    for(i = 0; i <= m; i++)       
      printf("%d ", list[i]);     
    printf("\n");     
    n++;   
  }   
  else   
  {     
    for(i = k; i <= m; i++)     
    {       
      swap(&list[k], &list[i]);       
      perm(list, k + 1, m);       
      swap(&list[k], &list[i]);     
    }   
  } 
} 
int main() 
{   
  int list[] = {1, 2, 3, 4, 5};   
  perm(list, 0, 4);   
  printf("total:%d\n", n);   
  return 0; 
}

誰有更高效的遞歸和非遞歸算法,請回貼。

相關(guān)文章

  • getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • C++ std::unique_lock 用法實(shí)例詳解

    C++ std::unique_lock 用法實(shí)例詳解

    std::unique_lock 是 C++11 提供的一個(gè)用于管理互斥鎖的類,它提供了更靈活的鎖管理功能,適用于各種多線程場景,這篇文章給大家介紹了C++ std::unique_lock 用法,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • Qt增加版本公司等信息兩種方式

    Qt增加版本公司等信息兩種方式

    在項(xiàng)目中生成exe或者動(dòng)態(tài)庫過程中可能需要加入公司信息、版本號、說明等等,下面這篇文章主要給大家介紹了關(guān)于Qt增加版本公司等信息的兩種方式,需要的朋友可以參考下
    2024-01-01
  • C++中for auto的用法及說明

    C++中for auto的用法及說明

    這篇文章主要介紹了C++中for auto的用法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • c++ const引用與非const引用介紹

    c++ const引用與非const引用介紹

    const引用是指向const對象的引用,可以讀取ref,但不能修改所以也就有將const變量賦值給非const引用是非法的,感興趣的朋友可以了解下,或許本文對你有所幫助
    2013-01-01
  • 詳解C++的模板中typename關(guān)鍵字的用法

    詳解C++的模板中typename關(guān)鍵字的用法

    在C++的Template中我們經(jīng)??梢砸姷绞褂胻ypename來定義類型名稱,更加具體的我們就在接下來為大家詳解C++的模板中typename關(guān)鍵字的用法,需要的朋友可以參考下:
    2016-06-06
  • 深入理解C/C++中的寫時(shí)拷貝

    深入理解C/C++中的寫時(shí)拷貝

    這篇文章主要給大家介紹了C/C++中寫時(shí)拷貝的相關(guān)資料,所謂寫時(shí)拷貝也就是拖延版的深拷貝,下面文章中介紹的非常清楚,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • jQuery移動(dòng)頁面開發(fā)中主題按鈕的設(shè)計(jì)示例

    jQuery移動(dòng)頁面開發(fā)中主題按鈕的設(shè)計(jì)示例

    這篇文章主要介紹了jQuery移動(dòng)頁面開發(fā)中主題按鈕的設(shè)計(jì)示例,jQuery是當(dāng)今最具人氣的JavaScript開發(fā)類庫,需要的朋友可以參考下
    2015-12-12
  • Qt中QStringList與QString的常用方法總結(jié)

    Qt中QStringList與QString的常用方法總結(jié)

    這篇文章主要為大家總結(jié)了Qt中QString 與 (QStringList | QByteArray)之間的轉(zhuǎn)換,以及QString、QStringList的一些常用方法,感興趣的可以收藏一下
    2022-12-12
  • C語言帶頭雙向循環(huán)鏈表的示例代碼

    C語言帶頭雙向循環(huán)鏈表的示例代碼

    這篇文章主要介紹了如何利用C語言實(shí)現(xiàn)帶頭雙向循環(huán)鏈表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-11-11

最新評論

兴宁市| 大石桥市| 花莲市| 东乌珠穆沁旗| 常宁市| 楚雄市| 马边| 正镶白旗| 玉溪市| 七台河市| 丰原市| 大连市| 达孜县| 扶沟县| 七台河市| 临城县| 玉溪市| 涿州市| 仪征市| 和平县| 申扎县| 灵山县| 黑河市| 乐至县| 乐至县| 合川市| 两当县| 越西县| 衡阳县| 柳河县| 托里县| 洪湖市| 仙桃市| 博野县| 宽甸| 云浮市| 高安市| 西华县| 伊宁县| 仁寿县| 德化县|