本文介绍了使用回溯法找出n个自然数中取r个数的全排列的方法,有兴趣的可参考一下。
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。
本实例是用回溯法输出n个自然数中以r个数全排列。代码如下:
public void Arrange(int n, int r) int i = 0, j; string s; int[] a = new int[n]; a[i] = 1; while (true) { if ((a[i] - i) <= (n - r + 1)) { if (i == (r - 1)) { s = ""; for (j = 0; j < r; j++) { s = s + Convert.ToString(a[j]) + ","; } // Memo1.Lines.Append(Trim(s)); Console.WriteLine(s); a[i] = a[i] + 1; continue; } i = i + 1; a[i] = a[i - 1] + 1; } else { if (i == 0) { break; } i = i - 1; a[i] = a[i] + 1; } }
本文源自:翔宇亭——IT乐园(http://),转载请保留此信息!