zoukankan      html  css  js  c++  java
  • HDU 2553 N皇后问题 DFS 简单题

    Problem Description
     
    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。

     
    Input
    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
     
    Output
    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
     
    Sample Input
    1 8 5 0
     
    Sample Output
    1 92 10

     

    只需要开一个数组,vis[i] 表示第i行的皇后要放在vis[i]这一列。
     
     1 #include<cstdio>
     2 #include<cstring>
     3 int vis[12];
     4 int n;
     5 int ans;
     6 bool judge(int cnt,int t)
     7 {
     8     for(int i=1;i<cnt;i++)
     9         if(vis[i]==t)
    10             return false;
    11     for(int i=1;i<cnt;i++)
    12         if(t-vis[i]==cnt-i||vis[i]-t==cnt-i)
    13             return false;
    14     return true;
    15 }
    16 void dfs(int cnt)
    17 {
    18     if(cnt==n+1)
    19     {
    20         ans++;
    21         return ;
    22     }
    23     for(int i=1;i<=n;i++)
    24     {
    25         if(judge(cnt,i)&&!vis[cnt])
    26         {
    27             vis[cnt]=i;
    28             dfs(cnt+1);
    29             vis[cnt]=0;
    30         }
    31     }
    32 
    33 }
    34 int main()
    35 {
    36     while(scanf("%d",&n))
    37     {
    38         if(n==0)
    39             break;
    40         memset(vis,0,sizeof(vis));
    41         ans=0;
    42         dfs(1);
    43         printf("%d
    ",ans);
    44     }
    45     return 0;
    46 }
    第一份代码
    上面的代码tle了,所以我直接用它来打表。
     
     1 #include<cstdio>
     2 int vis[11]={0,1,0,0,2,10,4,40,92,352,724};
     3 int main()
     4 {
     5     int n;
     6     while(scanf("%d",&n))
     7     {
     8         if(n==0)
     9             break;
    10         printf("%d
    ",vis[n]);
    11     }
    12     return 0;
    13 }
    提交代码
     
     
     
     
  • 相关阅读:
    前端模板Nunjucks简介
    git提交时支持文件名大小写的修改
    多行文本加省略号的处理方法
    前端性能优化实践方案总结
    使用gulp工具生成svgsprites
    koa简介
    JSX语法简介
    踩坑所引发出的appendChild方法的介绍
    React业务实践
    javascript--数组
  • 原文地址:https://www.cnblogs.com/-maybe/p/4392256.html
Copyright © 2011-2022 走看看