用回溯法找出n個自然數中取r個數的全排列

2022-03-10 05:48:10 字數 710 閱讀 6706

回溯法也稱為試探法,該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一列舉和檢驗。在回溯法中,放棄當前候選解,尋找下乙個候選解的過程稱為回溯。

本例項是用回溯法輸出n個自然數中以r個數全排列。**如下:

1

public

void arrange(int n, int r)

2int i = 0, j;

3string s;

4int a = new

int[n];

5 a = 1;

6while (true)

7

17//

18 console.writeline(s);

19 a = a + 1;

20continue;

21 }

22 i = i + 1;

23 a = a[i - 1] + 1;

24 }

25else

26

31 i = i - 1;

32 a = a + 1;

33 }

34 }

前N個自然數的隨機置換

來自 資料結構與演算法分析 c語言描述 練習2.7 問題描述 假設需要生成前n個自然數的乙個隨機置換。例如,和 就是合法的置換,但 卻不是,因為數1出現了兩次而數 3 缺沒有。這個程式常常用於模擬一些演算法。我們假設存在乙個隨機數生成器 randint i,j 它以相同的概率生成 i 和 j 之間的...

排列組合 從n個自然數中取出r個數的組合

這種題目一般有兩種方法,比較直接的方法就是使用循壞,但是對於這種方法只有r小於等於4時才是可行的,這個時候複雜度是 o n r 可知,這種方法的時間複雜度很高,而且這種迴圈機制嚴重依賴r,通過r來控制迴圈層數,因此這種方法不具有普遍性。最常用的方法就是使用遞迴。在迴圈演算法設計中,每個組合中的資料都...

求 從m個自然數中任取n個數的所有組合

問題 編寫乙個遞迴演算法,找出從自然數1,2,3,m中任取n個數的所有組合。例如 m 5,n 3時,所有組合為543,542,541,532,531,521,432,431,421,321。方法1 設這m個自然數存放在整數陣列a k 中,a i 存放i 1 0 i n 1 可採用遞迴演算法,例如,m...