BZOJ_P3101 N皇后/POJ_P3239 Solution to the n Queens Puzzle(N皇后构造)

来源:互联网 发布:mysql怎么备份数据库 编辑:程序博客网 时间:2024/06/05 05:36

BZOJ传送门
POJ传送门

Time Limit: 10 Sec Memory Limit: 128 MBSec Special Judge
Submit: 147 Solved: 72
[Submit][Status][Discuss]
Description
n*n的棋盘,在上面摆下n个皇后,使其两两间不能相互攻击…

Input
一个数n

Output
第i行表示在第i行第几列放置皇后

Sample Input
4

Sample Output
2
4
1
3

HINT
100%的数据3< n<1000000。输出任意一种合法解即可

Source

N皇后构造法

#include<cstdio>#include<iostream>using namespace std;int n,k;int main(){    while(scanf("%d",&n)!=EOF){        if(n%6!=2&&n%6!=3){            for(int i=2;i<=n;i+=2) printf("%d\n",i);            for(int i=1;i<=n;i+=2) printf("%d\n",i);            continue;        }        k=n/2;        if(k&1){            for(int i=k;i<n;i+=2) printf("%d\n",i);            for(int i=1;i<=k-2;i+=2) printf("%d\n",i);            for(int i=k+3;i<=n;i+=2) printf("%d\n",i);            for(int i=2;i<=k+1;i+=2) printf("%d\n",i);        }        else{            for(int i=k;i<=n;i+=2) printf("%d\n",i);            for(int i=2;i<=k-2;i+=2) printf("%d\n",i);            for(int i=k+3;i<n;i+=2) printf("%d\n",i);            for(int i=1;i<=k+1;i+=2) printf("%d\n",i);        }        if(n&1) printf("%d\n",n);    }    return 0;}
0 0