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

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

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

程序的主要思路是:

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

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

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

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

解題過(guò)程:

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

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

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

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

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

3.當(dāng)N = 3的時(shí)候,數(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í)候需要交換原數(shù)組的a[0]和a[1]),然后打印a, c的全排列,打印完后再換回原來(lái)的位置,即a還是恢復(fù)到a[0],b還恢復(fù)到a[1]的位置

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

至此,全排列完成

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

#include <stdio.h>
 
/************************************************************************/
/* 功能:實(shí)現(xiàn)兩個(gè)整形參數(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 --查找一個(gè)排列的開(kāi)始位置
/*    end  --查找一個(gè)排列的結(jié)束位置,當(dāng)begin=end時(shí),表明完成一個(gè)排列
/************************************************************************/
void FullPermutation(int source[], int begin, int end)
{
 int i;
 
 if (begin >= end) // 找到一個(gè)排列
 {
 for (i = 0; i < end; i++)
 {
  printf("%d", source[i]);
 }
 printf("\n");
 }
 else// 沒(méi)有找完一個(gè)排列,則繼續(xù)往下找下一個(gè)元素
 {
 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]); // 回溯時(shí)還原
  } 
 }
 }
}
 
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;
}

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

相關(guān)文章

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

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

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

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

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

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

    記得N年前剛開(kāi)始接觸編程時(shí),使用的是Visual C++6.0,下面這個(gè)可愛(ài)的圖標(biāo)很多人一定很熟悉。不過(guò)今天想嘗鮮新的工具 Visual Studio Code 來(lái)搭建C/C++開(kāi)發(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ù)對(duì)象的重要組成部分,它們可以用于將函數(shù)和參數(shù)綁定在一起,形成一個(gè)可調(diào)用的對(duì)象,這篇文章主要介紹了C++11 std::function和std::bind 的使用示例詳解,需要的朋友可以參考下
    2023-03-03
  • C++中的數(shù)據(jù)對(duì)齊示例詳解

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

    這篇文章主要介紹了C++中數(shù)據(jù)對(duì)齊的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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ì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • CRITICAL_SECTION用法案例詳解

    CRITICAL_SECTION用法案例詳解

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

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

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

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

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

最新評(píng)論

会宁县| 油尖旺区| 新竹县| 巨鹿县| 裕民县| 宣汉县| 浮山县| 江阴市| 正宁县| 迭部县| 祁东县| 仁怀市| 郸城县| 浦县| 乌兰浩特市| 扎囊县| 睢宁县| 惠安县| 岳普湖县| 利川市| 武义县| 社旗县| 吉水县| 竹北市| 遵义县| 彭州市| 连平县| 桦川县| 墨江| 唐海县| 曲周县| 中山市| 宁陵县| 娱乐| 保定市| 天门市| 扬州市| 德钦县| 商都县| 伊川县| 雅江县|