zoukankan      html  css  js  c++  java
  • H

    H - N皇后问题

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

    Description

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

     

    Input

    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
     

    Output

    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
     

    Sample Input

    1 8 5 0
     

    Sample Output

    1 92 10
     
    //就是一般的dfs,不过难点在于怎样效率高,不过你写个一般的,然后打表也是能过的
     1 #include <iostream>
     2 #include <stdio.h>
     3 
     4 using namespace std;
     5 
     6 int n,all;
     7 int vis[3][30];
     8 
     9 void dfs(int x)
    10 {
    11     if (x==n+1)
    12     {
    13         all++;
    14         return ;
    15     }
    16     for (int i=1;i<=n;i++)
    17     {
    18         if (!vis[0][i]&&!vis[1][x+i]&&!vis[2][x-i+12])
    19         {
    20             vis[0][i]=vis[1][x+i]=vis[2][x-i+12]=1;
    21             dfs(x+1);
    22             vis[0][i]=vis[1][x+i]=vis[2][x-i+12]=0;
    23         }
    24     }
    25 }
    26 
    27 int main()
    28 {
    29     scanf("%d",&n);
    30     dfs(1);
    31     printf("%d
    ",all);
    32     return 0;
    33 }
    View Code
     
     
     
  • 相关阅读:
    第2阶段冲刺2
    第2阶段冲刺1
    在Ubuntu下安装VWMare tools
    mysql命令行修改密码
    Ubuntu设置环境变量
    java输出程序运行时间
    Hadoop之环境搭建
    MapReduce实现WordCount
    大数据技术之kettle(2)——练习三个基本操作
    大数据技术之kettle(1)——安装
  • 原文地址:https://www.cnblogs.com/haoabcd2010/p/5676752.html
Copyright © 2011-2022 走看看