描述
输出8皇后问题所有结果。
输入
没有输入。
输出
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
输入样例
输出样例
输出的前几行:
No 1:
A…….
….A…
…….A
…..A..
..A…..
……A.
.A……
…A….
No 2:
A…….
…..A..
…….A
..A…..
……A.
…A….
.A……
….A…
提示
输出样例是正确输出结果的前几行。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int cnt = 0;
int Queens[8];
int IsValid(int n)
{
int i;
for(i = 0;i<n;i++)
{
if(Queens[i]==Queens[n])
return 0;
if(abs(Queens[i]-Queens[n])==(n-i))
return 0;
}
return 1;
}
void Output()
{
int i,j,flag = 1;
printf("No %d:\n",++cnt);
for(i= 0;i<8;i++)
{
for(j = 0; j < 8;j++)
{
if(Queens[i]-1==j)
printf("A");
else
printf(".");
}
printf("\n");
}
}
void Queen(int n)
{
int i;
if(n==8)
{
Output();
return;
}
for(i= 1;i<=8;i++)
{
Queens[n] = i;
if(IsValid(n))
Queen(n + 1);
}
}
int main()
{
Queen(0);
return 0;
}