/*
* @file IterativeBacktrackNqueens.cpp
* @brief to use IteratorBacktrack's way solve Nqueens' problem
* @author/Univ. taoxiaoxiao/XMU
* @date 12-1-2014
*/
//迭代回溯法求解N皇后
//输出解决方案数和行列标(只打印第一个解决方案)
#include <iostream>
#include <cmath>
using namespace std;
#define MAXN 13
int x[MAXN+1], y[MAXN+1], n, sum;
bool isGo = false;
bool place(int k)
{
for (int j = 1; j < k; ++j)
{
if (x[k] == x[j] || abs(x[k] - x[j]) == abs(k - j))
return false;
}
return true;
}
void IteratorBacktrackNqueens()
{
int k = 1;
while (k > 0)
{
while (x[k] < n)
{
x[k] += 1;
if (place(k))
{
if (k == n)
{
++sum;
if (isGo == false) //保存第一组数据
{
for (int i = 1; i <= n; ++i)
y[i] = x[i];
isGo = true;
迭代回溯法求解N皇后
最新推荐文章于 2024-01-01 09:28:01 发布
本文详细探讨了如何运用回溯法来解决经典的N皇后问题,通过递归实现放置皇后并检查冲突,逐步找到所有可能的解决方案。介绍了算法的基本思想、步骤,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成