zoukankan      html  css  js  c++  java
  • HDU2553 N皇后问题dfs

    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 
    你的任务是,对于给定的N,求出有多少种合法的放置方法。 
    
    Input
    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
    Output
    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
    Sample Input
    1 8 5 0

    Sample Output 1 92 10

    题意:求出n*n里面放置棋子的情况,使得每个棋子所在行、列、对角线没有其它棋子

    思路:

      直接看代码吧,代码注释比较好懂。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<cmath>
     5 using namespace std;
     6 
     7 int ans[11];
     8 int a[11];
     9 int sum,n;
    10 
    11 int judge(int x)
    12 {
    13     for(int i=1; i<x; i++) //判断之前和走过的行是否有重复
    14     {
    15         int dd1=abs(i-x);
    16         int dd2=abs(a[i]-a[x]);
    17         if(a[i]==a[x]||(dd1==dd2))
    18         {
    19             return 1;
    20         }
    21     }
    22     return 0;
    23     //对角线出现过即k=-1或1
    24     //即斜率的绝对值=1
    25     //即两者的横纵坐标对应相减后绝对值相等
    26 }
    27 void dfs(int x)//传入行
    28 {
    29     //cout<<x<<"&&&&&&&&&&&&";
    30     if(x>n) // if(x==n+1)
    31     {
    32         sum++;
    33         return ;
    34     }
    35 
    36     for(int j=1; j<=n; j++) //决定下在哪一列
    37     {
    38         a[x]=j;//下上去
    39         //cout<<judge(x)<<"*****"<<endl;
    40         if(judge(x)==1)//说明出现过了
    41             continue;
    42         //    return;
    43         else
    44         {
    45             dfs(x+1);
    46         }
    47     }
    48     return ;
    49 }
    50 
    51 int main()
    52 {
    53     std::ios::sync_with_stdio(false);
    54     cin.tie(0);
    55     cout.tie(0);
    56     memset(ans,0,sizeof(ans));
    57     for(int i=1; i<=10; i++)
    58     {
    59         n=i;
    60         sum=0;
    61         dfs(1);
    62         ans[i]=sum;
    63     }
    64     while(cin>>n)
    65     {
    66         if(n==0)
    67             break;
    68         cout<<ans[n]<<endl;
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    简述智障版本搜索引擎架构
    kaggle PredictingRedHatBusinessValue 简单的xgboost的交叉验证
    机器学习速查表
    World final 2017 题解
    微博爬虫
    喵哈哈村的魔法考试 Round #21 (Div.2) 题解
    喵哈哈村的魔法考试 Round #20 (Div.2) 题解
    Tinkoff Challenge
    常用的机器学习&数据挖掘知识(点)总结
    喵哈哈村的魔法考试 Round #19 (Div.2) 题解
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11474510.html
Copyright © 2011-2022 走看看