回溯法也稱為試探法,該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一列舉和檢驗。在回溯法中,放棄當前候選解,尋找下乙個候選解的過程稱為回溯。
本例項是用回溯法輸出n個自然數中以r個數全排列。**如下:
1public
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...