欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年02月01日 15:19:22   作者:henufyh  
這篇文章主要介紹了C語言實現(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放在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>
 
/************************************************************************/
/* 功能:實現(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;
}
 
/************************************************************************/
/* 功能:實現(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++分析講解類的靜態(tài)成員變量是什么

    C++分析講解類的靜態(tài)成員變量是什么

    在C++中,靜態(tài)成員是屬于整個類的而不是某個對象,靜態(tài)成員變量只存儲一份供所有對象共用。所以在所有對象中都可以共享它。使用靜態(tài)成員變量實現(xiàn)多個對象之間的數(shù)據(jù)共享不會破壞隱藏的原則,保證了安全性還可以節(jié)省內(nèi)存
    2022-04-04
  • C++模擬實現(xiàn)List迭代器詳解

    C++模擬實現(xiàn)List迭代器詳解

    list不同于其他容器,他是一個鏈表,物理地址并不連續(xù)。所以在實現(xiàn)list類的迭代器的時候,需要將迭代器單獨封裝到一個類里,因為需要重載很多操作符來跟其他容器的迭代器使用達(dá)成一致
    2022-04-04
  • C語言實現(xiàn)井字棋游戲

    C語言實現(xiàn)井字棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Qt兩種定時器使用實現(xiàn)方式

    Qt兩種定時器使用實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Qt兩種定時器使用實現(xiàn)方式的相關(guān)資料,Qt中的定時器類是QTimer,QTimer不是一個可見的界面組件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • VC隨機函數(shù)srand和rand用法

    VC隨機函數(shù)srand和rand用法

    VC中隨機函數(shù)最常用就是srand和rand(實際上是屬于標(biāo)準(zhǔn)C函數(shù)),其中srand負(fù)責(zé)設(shè)置隨機種子,rand則負(fù)責(zé)生成隨機數(shù)。使用此二隨機函數(shù)需要包含<stdlib.h>頭文件
    2016-11-11
  • C語言之初始if語句詳解

    C語言之初始if語句詳解

    本文主要介紹C語言中的if語句,這里詳細(xì)介紹了if 語句并提供了簡單的示例代碼,希望能幫助編程入門的小伙伴學(xué)習(xí),希望能夠給你帶來幫助
    2021-08-08
  • c語言尾隊列tailq使用示例分享

    c語言尾隊列tailq使用示例分享

    這篇文章主要介紹了c語言尾隊列tailq使用示例,大家參考使用吧
    2014-01-01
  • C語言全方位講解數(shù)組的使用

    C語言全方位講解數(shù)組的使用

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-04-04
  • C++訪問注冊表獲取已安裝軟件信息列表示例代碼

    C++訪問注冊表獲取已安裝軟件信息列表示例代碼

    這篇文章主要介紹了c++通過讀取注冊表獲得本機已安裝軟件信息的方法,大家參考使用吧
    2013-11-11
  • 深入解析int(*p)[]和int(**p)[]

    深入解析int(*p)[]和int(**p)[]

    以下是對int(*p)[]和int(**p)[]的使用進行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07

最新評論