请教:回溯法解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);
}
}
这里得到的只是解的个数,没有详细的解序列。能否将每个解序列都输出?类的代码应该怎样修改?
谢谢。