• [ An Ac a Day ^_^ ] hdu 2553 N皇后问题 搜索


    曾经想过一天一AC 坚持下来的确不容易额 (我是没坚持下来 尽量以后坚持……

    经典的N皇后问题 搜索的入门问题 学了这么久竟然一直没敲过 今天敲一下……

    这道题也不是很简单额 纯暴力就超时了 要打一下表……

    而且有一个小的优化

    每次判断是否合理不用铺满图再判断

    只需要判断当前放皇后的位置的上方 左上和右上有没有皇后就可以了

    自己想也不好想-_-||

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<math.h>
     5 #include<string.h>
     6 #include<string>
     7 #include<map>
     8 #include<set>
     9 #include<vector>
    10 #include<queue>
    11 #include<list>
    12 #define M(a,b) memset(a,b,sizeof(a))
    13 using namespace std;
    14 typedef long long ll;
    15 const int inf=0x3f3f3f3f;
    16 const int maxn=1e1+10;
    17 int dx[8]= {0,0,1,-1,1,-1,1,-1};
    18 int dy[8]= {1,-1,0,0,-1,1,1,-1};
    19 //---------------------------------------ヽ(^。^)丿
    20 int cnt,n,ans[maxn];
    21 int _map[maxn];
    22 void dfs(int x)
    23 {
    24     if(x>n)
    25     {//只要能搜到这一步一定符合条件了
    26         cnt++;
    27         return ;
    28     }
    29     for(int i=1; i<=n; i++)
    30     {
    31         _map[x]=i; //放置皇后
    32         bool ok=true;
    33         for(int j=x-1;j>=1;j--)
    34             if(_map[j]==i|| //正上方
    35                _map[j]==i-x+j|| //左上方
    36                _map[j]==i+x-j) //右上方
    37                     ok=false;
    38         if(ok) dfs(x+1); //符合条件继续搜索
    39     }
    40     return ;
    41 }
    42 int main()
    43 {
    44     M(ans,-1);
    45     while(~scanf("%d",&n)&&n)
    46     {
    47         if(ans[n]!=-1)
    48             printf("%d
    ",ans[n]);
    49         else
    50         {
    51             M(_map,-1);
    52             cnt=0;
    53             dfs(1);
    54             ans[n]=cnt; //打表
    55             printf("%d
    ",cnt);
    56         }
    57     }
    58     return 0;
    59 }
    60 /*
    61 
    62 1
    63 8
    64 5
    65 0
    66 
    67 */
  • 相关阅读:
    bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
    luoguP1886 滑动窗口 [单调队列]
    bzoj1047: [HAOI2007]理想的正方形
    bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
    树与二叉树之二--二叉树的性质与存储
    树与二叉树之一--基本概念与存储结构
    Markdown段首空格
    C++ atan2
    凸包学习笔记
    Codeforces Round #545 (Div. 1) E. Train Car Selection
  • 原文地址:https://www.cnblogs.com/general10/p/5929579.html
Copyright © 2020-2023  润新知