N-Queens II

系统 1585 0

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

 

                #include<iostream>
                
                  

#include
                
                <vector>
                
                  

#include
                
                <cmath>


                
                  using
                
                
                  namespace
                
                
                   std;




                
                
                  class
                
                
                   Solution

{


                
                
                  public
                
                
                  :

    
                
                
                  int
                
                 res=
                
                  0
                
                
                  ;

    
                
                
                  int
                
                 totalNQueens(
                
                  int
                
                
                   n)

    {



        vector
                
                <
                
                  int
                
                > state(n,-
                
                  1
                
                
                  );

        helper(n,
                
                
                  0
                
                
                  ,state);

        
                
                
                  return
                
                
                   res;

    }

    
                
                
                  void
                
                 helper(
                
                  int
                
                 n,
                
                  int
                
                 start,vector<
                
                  int
                
                > &
                
                  state)

    {

        
                
                
                  if
                
                (start==
                
                  n)

        {

            res
                
                ++
                
                  ;

            
                
                
                  return
                
                
                  ;

        }

        
                
                
                  int
                
                
                   i;

        
                
                
                  for
                
                (i=
                
                  0
                
                ; i<n; i++
                
                  )

        {

            
                
                
                  if
                
                
                  (isValid(state,start,i))

            {

                state[start]
                
                =
                
                  i;

                helper(n,start
                
                +
                
                  1
                
                
                  ,state);

                state[start]
                
                =-
                
                  1
                
                
                  ;

            }

        }

    }

    
                
                
                  bool
                
                 isValid(vector<
                
                  int
                
                > &state,
                
                  int
                
                 row,
                
                  int
                
                
                   col)

    {

        
                
                
                  int
                
                
                   i;

        
                
                
                  for
                
                (i=
                
                  0
                
                ; i<row; i++
                
                  )

            
                
                
                  if
                
                (state[i]==col||row-i==abs(state[i]-
                
                  col))

                
                
                
                  return
                
                
                  false
                
                
                  ;

        
                
                
                  return
                
                
                  true
                
                
                  ;

    }

};




                
                
                  int
                
                
                   main()

{

    Solution s;

    cout
                
                <<s.totalNQueens(
                
                  4
                
                )<<
                
                  endl;

}
                
              

 

 
 

N-Queens II


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论