hdu2553 n皇后问题

来源:互联网 发布:淘宝商城男装休闲t恤 编辑:程序博客网 时间:2024/05/16 04:22
  • 分析:从第一行到最后一行依次放置皇后,判断条件有三个:
  • 这一列没有被标记
  • 左下到右上没有被标记
  • 右下到左上没有被标记

  • 我们发现两条斜对角线线的坐标满足一定关系:

  • 左下-右上:x+y相等
  • 右下-左上:x-y相等(可能有负数,+n将结果区间右移)

#include <cstdio>#include <iostream>#include <cstring>using namespace std;int c[100],l[100],r[100],ans[100],n,sum;void dfs(int row,int n){    for (int i = 1; i <= n; i += 1){        if (!c[i] && !l[row+i] && !r[row-i+n]){            c[i] = l[row+i] = r[row-i+n] = 1;            if (row == n) sum++;            else dfs(row+1,n);            c[i] = l[row+i] = r[row-i+n] = 0;        }    }}int main(int argc, char const* argv[]){    for (int i = 1; i <= 10; i += 1){        sum = 0;        dfs(1,i);        ans[i] = sum;    }    while (cin >> n,n) cout << ans[n] << endl;    return 0;}
原创粉丝点击