8皇后是一个经典问题,大意就是8*8的棋盘上放8个皇后棋子,其中这八个棋子不同行不同列不同斜线。看了很多解题的方法,这里先记录一种。
分析见代码:
#include <iostream>
using namespace std;
int sum;
//打印函数
void print(int result[])
{
for(int i = 0;i < 8;i++)
{
for(int j = 0;j < result[i];j++)
cout<<"* ";
cout<<"# ";
for(int j = result[i] + 1;j < 8;j++)
cout<<"* ";
cout<<endl;
}
cout<<"----------------"<<endl;
sum++;
}
//检查第x行第result[x]列是否可以
bool check(int result[],int x)
{
for(int i = 0;i < x;i++)
{
//不同行不同列不同斜线
if(result[i] == result[x] || abs(result[i] - result[x]) == (x - i))
return false;
}
return true;
}
//递归求所有解
void queen(int result[],int x)
{
if(x == 8)
{
print(result);
return ;
}
for(int i = 0;i < 8;i++)
{
result[x] = i;
if(check(result,x))
{
//递归求解
queen(result,x + 1);
}
}
}
int main()
{
int result[8] = {0};
queen(result,0);
cout<<sum;
return 0;
}