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

时间:2022-07-28 17:26:20 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。

本实例是用回溯法输出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;

}

}

本文来源:https://www.wddqw.com/doc/f2ea30d276a20029bd642d6e.html