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

回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。
本实例是用回溯法输出n个自然数中以r个数全排列。代码如下:

 1 public void Arrange(int n, int r) 
2 int i = 0, j;
3 string s;
4 int[] a = new int[n];
5 a = 1;
6 while (true)
7 {
8 if ((a - i) <= (n - r + 1))
9 {
10 if (i == (r - 1))
11 {
12 s = "";
13 for (j = 0; j < r; j++)
14 {
15 s = s + Convert.ToString(a[j]) + ",";
16 }
17 // Memo1.Lines.Append(Trim(s));
18 Console.WriteLine(s);
19 a = a + 1;
20 continue;
21 }
22 i = i + 1;
23 a = a[i - 1] + 1;
24 }
25 else
26 {
27 if (i == 0)
28 {
29 break;
30 }
31 i = i - 1;
32 a = a + 1;
33 }
34 }

 

posted @ 2011-12-31 09:13  ×jokey  阅读(1019)  评论(0编辑  收藏  举报