码迷,mamicode.com
首页 > 其他好文 > 详细

n皇后(方法数)

时间:2015-10-18 21:12:35      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

1295 N皇后问题

 

 时间限制: 2 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 题目描述 Description

在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。

输入描述 Input Description

 给定棋盘的大小n (n ≤ 13)

输出描述 Output Description

 输出整数表示有多少种放置方法。

样例输入 Sample Input

8

样例输出 Sample Output

92

数据范围及提示 Data Size & Hint

n<=13

(时限提高了,不用打表了)

分类标签 Tags 

搜索

思路:大法师(DPS)

program aa;
var x:array[1..13]of longint;
    a,b,c:array[-14..26]of boolean;
    i,total,n:longint;
procedure try(i:longint);
var j:longint;
begin
    for j:=1 to n do
        if a[j]and b[i+j]and c[i-j] then//a,b,c分别判断同一列,同一对角线,另一条对角线是否有点。
        begin
            x[i]:=j;
            a[j]:=false;
            b[i+j]:=false;
            c[i-j]:=false;
            if i<n then try(i+1) else total:=total+1;//i为当前行数,i=n表示已找到一种方法
            a[j]:=true;
            b[i+j]:=true;
            c[i-j]:=true;
        end;
end;
begin
    fillchar(a,sizeof(a),true);
    fillchar(b,sizeof(b),true);
    fillchar(c,sizeof(c),true);
    readln(n);
    total:=0;
    try(1);
    writeln(total);
end.

一点反思:真的不难。

n皇后(方法数)

标签:

原文地址:http://www.cnblogs.com/liuxinyu/p/4890218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!