zoukankan      html  css  js  c++  java
  • [ 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 */
  • 相关阅读:
    WinForm笔记1:TextBox编辑时和DataGridView 单元格编辑时 的事件及其顺序
    Emgu 学习(4) 使用指针访问图像内存
    SolidWorks学习笔记1
    Emgu 学习(3) 绘图,使用鼠标绘图,使用trackbar
    NModbus4的使用
    C# async await的使用
    Emgu 学习(2) 视频文件播放
    redis-key2
    redis--key1
    rpc优化
  • 原文地址:https://www.cnblogs.com/general10/p/5929579.html
Copyright © 2011-2022 走看看