在n個數選取m個數中進行全排列

2021-07-27 21:36:48 字數 906 閱讀 3185

#include

using

namespace

std;

int a[100]; //儲存排列的數

void function(int m,int k)

return

0; }

/*

@brief 從n個數選取m個數並進行全排列

select(int n,int

m) 從n個數中選取m個數

void rank(int

m) 對m個數進行全排列

*/#include

#include

void select(int n,int

m);void rank(int k,int

m);void swap(int

x,int

y,int data);

int value[10]=;

int data[10]=; //選取數存放在這裡(位置從1-m,0位置存放選取數的個數m)

int arr[10]=; //全排列的資料

int count; //資料總數

int size; //排序個數

int main()

void select(int n,int

m) printf("\n");

printf("對選出的%d個數進行全排列表示如下:\n",data[0]);

rank(0,size);}}

}void rank(int k,int n)

swap(k,i,arr);

}}void swap(int

x,int

y,int data)

N個數的全排列

我採用的方法是類似密碼箱的轉輪來得到所有的排列組合 比如求 1,2,3,4的所有排列組合 採用遞減式輪轉來生成 n 4 以1234為初始值 得到如下的所有4個組合,放入最終的容器中 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 n 3 以上面的四個作為初始值,在第三位開始輪轉 得到...

C 排列組合 N個數中取M個數

感謝一位好朋友和我分享了這樣的乙份 因為自己當時考慮的遞迴演算法相當糾結,怎樣遞迴都不大對,然後我的好朋友和我分享了一段這樣的 我現在分享給大家。題目 在n個數中取m個數,用的方法使用的是開闢乙個長度為100的int型陣列,0 1 2 99 100 比如說測試資料為 4 2 也就是從1 4中取2個數...

N個數的全排列 回溯法

思路 問題的解空間為排列樹,乙個排列中元素不能重複,故採用交換的方式,對於排列樹的第i層,擴充套件狀態是a i 可以取a i 到a n 1 的任何元素,即j i到n 1迴圈 將a i 與a j 交換,在這種方式下求出排列後需要恢復,即將a i 與a j 再次交換,回到之前的狀態 回溯 然後繼續求其他...