在我的网摘里已经有一个通过string类型存储来实现的
现在这个是自己通过char型数组来做的,异曲同工,不过相对来说,这个更容易理解
//八皇后问题
#include <stdio.h>
#include <string>
using namespace std;
static char Queue[8][8];
static int a[8];//列
static int b[15];//主对角线
static int c[15];//从对角线
static int iQueueNum = 0;//可行方案数
void qu(int i)
{
int iColumn;
for (iColumn = 0;iColumn < 8;iColumn++)
{
//满足条件
if (a[iColumn] == 0 && b[7- iColumn + i] == 0 && c[i + iColumn] == 0)
{
Queue[i][iColumn] = 'Q';
a[iColumn] = 1;
b[7- iColumn + i] = 1;
c[i + iColumn] = 1;
if (i < 7)
{
qu(i + 1);
}
else
{
printf("第%d种:/n", ++iQueueNum);
for (int i = 0;i<8;i++)
{
for (int j = 0;j<8;j++)
{
printf("%c ",Queue[i][j]);
}
printf("/n");
}
printf("/n/n");
}
//无论这方案能不能通过,都要回溯恢复
Queue[i][iColumn] = '-';
a[iColumn] = 0;
b[7- iColumn + i] = 0;
c[i + iColumn] = 0;
}
}
}
void main()
{
for (int i =0;i<8;i++)
{
a[i] = 0;
for (int j = 0;j<8;j++)
Queue[i][j] = '-';
}
for (int i = 0;i < 15;i++)
{
b[i] = c[i] = 0;
}
qu(0);
system("pause");
}