【c++】8*8棋盘五皇后独立解问题?

img


#include
#include
using namespace std;
int iCount = 0;

void pintf(int qp[8][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (qp[i][j] > 6)
cout << " Q ";
else
cout << " # ";
// cout<< " " << qp[i][j] ;
}
cout << endl;
}
cout << endl;
cout << endl;
}
void fz(int qp[8][8], int wz[5][2], int iIndex, int ii, int jj)
{
if (iIndex == 5)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (qp[i][j] == 0)
return;
}
} iCount++;
cout << "方式 " << iCount << endl;
pintf(qp); return;
} for (int i = ii; i < 8; i++)
{
for (int j = jj; j < 8; j++)
{
if (qp[i][j] == 0)
{
for (int m = 0; m < 8; m++) //设置
{
for (int n = 0; n < 8; n++)
{
if (m == i || n == j) //同行或同列
qp[m][n] += 1;
else if (m - n == i - j || n + m == i + j) //对角线
{
qp[m][n] += 1;
}
}
} qp[i][j] += 6;
wz[iIndex][0] = i;
wz[iIndex][1] = j;
//cout<< i << " " << j << " " << iIndex << endl ;
fz(qp, wz, iIndex + 1, i, 0);
//还原
qp[i][j] -= 6;
for (int m = 0; m < 8; m++) //设置
{
for (int n = 0; n < 8; n++)
{
if (m == i || n == j) //同行或同列
{
qp[m][n] -= 1;
}
else if (m - n == i - j || n + m == i + j) //对角线
{
qp[m][n] -= 1;
}
}
}
}
}
}
}
int main()
{
int qp[8][8], wz[5][2];
//init
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
qp[i][j] = 0;
}
}
iCount = 0;
fz(qp, wz, 0, 0, 0);
cout << "共计方式 " << iCount << endl;
}
这段代码运行有728种方式,怎么样添加solution数组只输出独立解呢?

笑死我了,该说不说,张老师确实是个很不错的老师

zsc是我见过最好的老师,学生们的编程能力在他课上得到了极大的提高

zsc老师的课是吧哈哈,我也写出了728解的方式,但是对不上数字,是因为解中存在两皇后位于同一行的情况,回溯法中没有体现。。。修改之后的程序时间复杂度极高。。也在头秃