总时间限制:
1000ms
内存限制:
65536kB
描述
Determine the columns of N queens should be place on. Columns should be greater than 1 and less than N. Columns should be all different. Each column plus its index should be different from others. Each column minus its index should also be different from others.
输入
One positive integer number N (N <= 200).
输出
An N*N 0/1 matrix A = {a[i][j]}, a[i][j]=1 indicates that there is a queue on cell (i,j), and a[i][j]=0 otherwise.
样例输入
4
样例输出
0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0
#include<bits/stdc++.h>//Writed by Wangzhimin Date: 2022.06.02
using namespace std;
int a[205],num,t=1;
int b[2000][205];
void queen(int n)
{
int i;
if(n==num)
{
for(i=0;i<num;++i)
b[t][i]=a[i];
t++;
return ;
}
for(i=0;i<num;++i){
int j;
for(j=0;j<n;++j){
if(a[j]==i||abs(a[j]-i)==abs(n-j))
break;
}
if(j==n){
a[n]=i;
queen(n+1);
}
}
}
int main()
{
scanf("%d",&num);
queen(0);
int i;
//输出,第一个即可
for(i=0;i<num;++i){
for(int j=0;j<num;j++){
if(j==b[1][i])//列与b中的行同时,输出1,能放的位置。
printf("1 ");
else
printf("0 ");
}
printf("\n"); }
return 0;
}