24h購物| | PChome| 登入
2011-06-16 18:17:49| 人氣1,121| 回應0 | 上一篇 | 下一篇

d543. 挑战极限 Part7:强大的N皇后

推薦 0 收藏 0 轉貼0 訂閱站台

http://zerojudge.tw/ShowProblem?problemid=d543

內容 :

 大家都AC过8皇后问题吧,好多人都说是水题。

看来要把它加强一丁点,也许就有点嚼头了!

今天的任务就是要在一个N*N的国际棋盘上,放置N个皇后,使之不能互相攻击,问有多少种方法。

 

輸入說明 :

每行都有一个N(0<N<16)。时限不能放宽,等时间放宽之后,测资加强,但N总不会超过20。

輸出說明 :

对于每组测试数据,输出相应的方法数。

注:可能有0哟!

範例輸入 :

8

範例輸出 :

92

提示 :

背景知識: 8皇后

8皇后加强版。

小心TLE哟!

限制时间10s,限制空间128MB,应该够了吧

别打表!若发现打表,测试数据大大的加强###

为了防止测试数据外泄,测试结果不公开,但是告诉你第一组输入测试数据,就是第N行的数据是N.

第二组很强大的!

###时间很紧,大家挑战极限吧!!!

出處 :

N皇后问题的终极优化 (管理:liouzhou_101)



作法 : bitmask
說明請參照 .
http://maplewing.blogspot.com/2011/03/uva11195another-n-queen-problem.html

/**********************************************************************************/
/*  Problem: d543 "挑战极限 Part7:强大的N皇后" from N皇后问题的终极优化*/
/*  Language: C                                                                   */
/*  Result: AC (2302ms, 268KB) on ZeroJudge                                       */
/*  Author: morris1028 at 2011-06-16 12:39:01                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
int y_row[16], Ans;
void backtracking(int n, int y, int x, int slash1, int slash2) {
    if(y == n) {Ans++; return ;}
    
    int nowslash1 = slash1 >> y;
    int nowslash2 = slash2 >> (n-y-1);
    int judge = y_row[y] & x & nowslash1 & nowslash2;
    int xput;
    while(judge) {
        xput = judge & (-judge); /*lowbit*/
        backtracking(n, y+1, x^xput, slash1^(xput<<y), slash2^(xput<<(n-y-1)));
        judge ^= xput;
    }
}
main() {
    int n, a, b;
    char s[16];
    while(scanf("%d", &n) == 1 && n) {
        for(a = 0; a < n; a++) {
            y_row[a] = (1<<n)-1;
        }
        Ans = 0;
        backtracking(n, 0, (1<<n)-1, (1<<(2*n-1))-1, (1<<(2*n-1))-1);
        printf("%d\n", Ans);
    }
    return 0;
}

台長: Morris
人氣(1,121) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:[JAVA] a001. 哈囉
此分類上一篇:a068. E. 看動畫 加强版

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文