读书人

请问:回溯法解n后有关问题能否得到

发布时间: 2012-02-14 19:19:19 作者: rapoo

请教:回溯法解n后问题,能否得到并输出所有解序列?
代码:
public class Queen
{

public void Queen(int n)
{
n = n;
Q.sum = 0;
int* p = new int[n+1];
for (int i = 0; i <= n; i++)
p[i] = 0;
Q.x = p;
}
private bool Place(int k)
{
for (int j = 1; j < k; j++)
if ((Math.Abs(k - j) == Math.Abs(x[j] - x[k])) | (x[j] == x[k])) return false;
return true;
}


public void Backtrack(int t)
{
if (t > n) sum++;
else for (int i = 1; i <= n; i++)
{
x[t] = i;
if (Place(t)) Backtrack(t + 1);
}
}
public int n; //皇后个数
public int* x; //当前解
public long sum; //当前已经找到的可行解的个数
}


在form上点按钮,执行下面的代码,为了简单,直接给了n=4
private void NQueenMenu_Click_1(object sender, EventArgs e)
{


listBox1.Items.Clear();
Queen Q = new Queen (4);
Q.Backtrack(1);

if (Q.sum == 0) listBox1.Items.Add( "无解 ");
else
{
listBox1.Items.Add(Q.sum);
}

}

这里得到的只是解的个数,没有详细的解序列。能否将每个解序列都输出?类的代码应该怎样修改?
谢谢。


[解决办法]
public void Backtrack(int t)
{
if (t > n)
{
sum++;
这里输出就是了。
}
else for (int i = 1; i <= n; i++)
{
x[t] = i;
if (Place(t)) Backtrack(t + 1);
}
}

[解决办法]
回溯法 理论上能求出 任何有限集问题的任何解。但你的程序我没看,不会

读书人网 >软件架构设计

热点推荐