- 1
- /*
- 2 LANG: C++
- 3 PROG: checker
- 4 */
- 5#include 6#include 7#include 8#include 9#include 10#define siji(i, x, y) for (int i = (x); i <= (y); ++i) 11#define xiaosiji(i, x, y) for (int i = (x); i < (y); ++i) 12#define gongzi(j, x, y) for (int j = (x); j >= (y); --j) 13#define ivorysi 14#define mo 11447 15#define eps 1e-8 16#define o(x)((x) * (x)) 17 using namespace std;
- 18 typedef long long ll;
- 19 int LeftDiagonal,
- RightDiagonal,
- Column;
- 20 int rec[15];
- 21 int n,
- ans,
- cnt;
- 22 void Print() {
- 23 siji(i, 1, n) {
- 24 printf("%d%c", rec[i], " \n" [i == n]);
- 25
- }
- 26
- }
- 27 void dfs(int k) {
- 28
- if (k > n) {
- 29++ans;
- 30
- if (cnt < 3) {++cnt;
- Print();
- }
- 31
- }
- 32 siji(i, 1, n) {
- 33
- if ((LeftDiagonal >> (k + i) & 1) == 0 && (RightDiagonal >> (k + n - i + 1) & 1) == 0 && (Column >> i & 1) == 0) {
- 34 //&的优先级比==低??
- 35 rec[k] = i;
- 36 LeftDiagonal |= (1 << (k + i));
- 37 RightDiagonal |= (1 << (k + n - i + 1));
- 38 Column |= (1 << i);
- 39 dfs(k + 1);
- 40 LeftDiagonal ^= (1 << (k + i));
- 41 RightDiagonal ^= (1 << (k + n - i + 1));
- 42 Column ^= (1 << i);
- 43
- }
- 44
- }
- 45
- }
- 46 void solve() {
- 47 scanf("%d", &n);
- 48 dfs(1);
- 49 printf("%d\n", ans);
- 50
- }
- 51 int main(int argc, char const * argv[]) 52 {
- 53#ifdef ivorysi 54 freopen("checker.in", "r", stdin);
- 55 freopen("checker.out", "w", stdout);
- 56#
- else 57 freopen("f1.in", "r", stdin);
- 58 //freopen("f1.out","w",stdout);
- 59#endif 60 solve();
- 61
- return 0;
- 62
- }
来源: http://www.bubuko.com/infodetail-2125280.html