Problem L
8皇后问题
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输出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 <stdlib.h>
using namespace std;
int a[8];
int No=0;
void display()
{
cout<<"No "<<++No<<":"<<endl;
for(int i=0;i<8;++i)
{
for(int j=0;j<8;++j)
{
if(a[i]==j) cout<<"A";
else cout<<".";
}
cout<<endl;
}
}
bool place(int row,int col)
{
bool flag=true;
for(int i=0;i<row;++i)
{
if(a[i]==col || (row-i)==abs(col-a[i]))
{
flag=false;
}
}
return flag;
}
void queen(int k)
{
if(k==8)
{
display();
}
else
{
for(int i=0;i<8;++i)
{
if(place(k,i))
{
a[k]=i;
queen(k+1);
}
}
}
}
int main()
{
queen(0);
return 0;
}