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

wangxl430 2007-07-10 07:21:18
代码:
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);
}

}

这里得到的只是解的个数,没有详细的解序列。能否将每个解序列都输出?类的代码应该怎样修改?
谢谢。
...全文
629 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2007-07-11
  • 打赏
  • 举报
回复
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);
}
}
bigc2000 2007-07-11
  • 打赏
  • 举报
回复
回溯法 理论上能求出 任何有限集问题的任何解。但你的程序我没看,不会

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧