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

C語言實(shí)現(xiàn)全排列算法模板的方法

 更新時間:2020年02月01日 15:19:22   作者:henufyh  
這篇文章主要介紹了C語言實(shí)現(xiàn)全排列算法模板的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

程序的主要思路是:

1.把第1個數(shù)換到最前面來(本來就在最前面),準(zhǔn)備打印1xx,再對后兩個數(shù)2和3做全排列。

2.把第2個數(shù)換到最前面來,準(zhǔn)備打印2xx,再對后兩個數(shù)1和3做全排列。

3.把第3個數(shù)換到最前面來,準(zhǔn)備打印3xx,再對后兩個數(shù)1和2做全排列。

可見這是一個遞歸的過程,把對整個序列做全排列的問題歸結(jié)為對它的子序列做全排列的問題,注意我沒有描述Base Case怎么處理,你需要自己想。你的程序要具有通用性,如果改變了N和數(shù)組a的定義(比如改成4個數(shù)的數(shù)組),其它代碼不需要修改就可以做4個數(shù)的全排列(共24種排列)。

解題過程:

1.當(dāng)N = 1的時候,則直接打印數(shù)列即可。

2.當(dāng)N = 2的時候,設(shè)數(shù)組為[a, b]

           打印a[0], a[1] (即a,b)

           交換a[0],a[1]里面的內(nèi)容

           打印a[0],a[1]  (此時已變成了[b, a] )

3.當(dāng)N = 3的時候,數(shù)組為[a, b, c]

3.1把a(bǔ)放在a[0] 的位置(原本也是如此,a[0] = a[0]),打印b,c的全排列(即a[1], a[2]的全排列)

3.2把b放在a[0]的位置(這時候需要交換原數(shù)組的a[0]和a[1]),然后打印a, c的全排列,打印完后再換回原來的位置,即a還是恢復(fù)到a[0],b還恢復(fù)到a[1]的位置

     3.3把c放在a[0]的位置(這時候需要交換的是原數(shù)組的a[0]和a[2]),然后打印a, b的全排列,打印完后再換回原來的位置,即a還是恢復(fù)到a[0],b還恢復(fù)到a[1]的位置

至此,全排列完成

當(dāng) N = 4,5,6,……的時候,以此類推。

#include <stdio.h>
 
/************************************************************************/
/* 功能:實(shí)現(xiàn)兩個整形參數(shù)值交換
/* 參數(shù):
/*    lhs--int類型的指針,指向待交換數(shù)1的地址
/*    rhs--int類型的指針,指向待交換數(shù)2的地址
/************************************************************************/
void Swap(int *lhs, int *rhs)
{
 int t = *lhs;
 
 *lhs = *rhs;
 *rhs = t;
}
 
/************************************************************************/
/* 功能:實(shí)現(xiàn)全排列功能
/* 參數(shù):
/*    source--整數(shù)數(shù)組,存放需要全排列的元素
/*    begin --查找一個排列的開始位置
/*    end  --查找一個排列的結(jié)束位置,當(dāng)begin=end時,表明完成一個排列
/************************************************************************/
void FullPermutation(int source[], int begin, int end)
{
 int i;
 
 if (begin >= end) // 找到一個排列
 {
 for (i = 0; i < end; i++)
 {
  printf("%d", source[i]);
 }
 printf("\n");
 }
 else// 沒有找完一個排列,則繼續(xù)往下找下一個元素
 {
 for (i = begin; i < end; i++)
 {
  if (begin != i)
  {
  Swap(&source[begin], &source[i]); // 交換
  }
 
  // 遞歸排列剩余的從begin+1到end的元素
  FullPermutation(source, begin + 1, end);
 
  if (begin != i)
  {
  Swap(&source[begin], &source[i]); // 回溯時還原
  } 
 }
 }
}
 
int main()
{
 int source[30];
 int i, count;
 
 scanf("%d", &count);
 
 // 初始化數(shù)組
 for (i = 0; i < count; i++)
 {
 source[i] = i + 1;
 }
 
 FullPermutation(source, 0, count);
 
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++  線程(串行 并行 同步 異步)詳解

    C++ 線程(串行 并行 同步 異步)詳解

    這篇文章主要介紹了C++ 線程(串行 并行 同步 異步)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C語言菜鳥基礎(chǔ)教程之條件判斷

    C語言菜鳥基礎(chǔ)教程之條件判斷

    本文給大家簡單介紹了下C語言中的條件判斷語句的語法和用法示例,非常簡潔實(shí)用,有需要的小伙伴可以參考下
    2017-10-10
  • Visual Studio Code (VSCode) 配置搭建 C/C++ 開發(fā)編譯環(huán)境的流程

    Visual Studio Code (VSCode) 配置搭建 C/C++ 開發(fā)編譯環(huán)境的流程

    記得N年前剛開始接觸編程時,使用的是Visual C++6.0,下面這個可愛的圖標(biāo)很多人一定很熟悉。不過今天想嘗鮮新的工具 Visual Studio Code 來搭建C/C++開發(fā)環(huán)境,感興趣的朋友一起看看吧
    2021-09-09
  • C++11 std::function和std::bind 的使用示例詳解

    C++11 std::function和std::bind 的使用示例詳解

    C++11中的std::function和std::bind是函數(shù)對象的重要組成部分,它們可以用于將函數(shù)和參數(shù)綁定在一起,形成一個可調(diào)用的對象,這篇文章主要介紹了C++11 std::function和std::bind 的使用示例詳解,需要的朋友可以參考下
    2023-03-03
  • C++中的數(shù)據(jù)對齊示例詳解

    C++中的數(shù)據(jù)對齊示例詳解

    這篇文章主要介紹了C++中數(shù)據(jù)對齊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解

    C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解

    這篇文章主要介紹了C++中Socket網(wǎng)絡(luò)編程實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù)

    C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)為其它進(jìn)制數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • CRITICAL_SECTION用法案例詳解

    CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計

    C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計

    在圖像分析的時候,我們經(jīng)常需要對單通道圖像的像素進(jìn)行統(tǒng)計。本文將主要介紹利用C++ OpenCV實(shí)現(xiàn)的圖像像素值統(tǒng)計的幾種方法,需要的可以參考一下
    2022-01-01
  • C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序)

    C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(147.鏈表插入排序),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

五家渠市| 无为县| 海口市| 饶河县| 葵青区| 靖宇县| 通榆县| 靖远县| 文昌市| 农安县| 公主岭市| 达拉特旗| 朔州市| 商南县| 承德县| 定陶县| 津南区| 洪湖市| 江孜县| 裕民县| 竹溪县| 龙州县| 西和县| 朝阳市| 澎湖县| 阳原县| 万全县| 加查县| 始兴县| 湘潭市| 淅川县| 岳池县| 灌云县| 乐平市| 长治县| 沧州市| 上思县| 黄浦区| 印江| 九龙坡区| 绥芬河市|