C++實現n皇后問題

來源:互聯網
上載者:User

 //參照書籍:電腦演算法基礎-華中科技大學第三版

//用回溯法實現n皇后問題,其中nqueens(int k)方法用遞迴實現,為了提高效率可以改成非遞迴

//queen.h--Queen class#ifndef _QUEEN_H_#define _QUEEN_H_#include<iostream>class Queen{private: int queens;//total queens int *answer;//answer array  int sum;//total answers //judge a certain place is available,k represent row,i represent column bool place(int k,int i)const; void printResult()const;//print resultpublic: Queen(int n); ~Queen(); void nqueens(int k=1);//search the solutionof vector space under the condition  void printSum()const{ std::cout<<sum<<std::endl;}};#endif//N_QUEEN.cpp--Queen class methods#include<cmath>#include"queen.h"Queen::Queen(int n){ queens=n; answer=new int[n+1]; sum=0;}Queen::~Queen(){ delete []answer; }void Queen::nqueens(int k){ answer[k]=1; while(answer[k]<=queens) {  if(place(k,answer[k]))  {   if(k==queens)   {    sum++;    printResult();   }   else    nqueens(k+1);  }   answer[k]=answer[k]+1; }}bool Queen::place(int k,int i)const{ int m=1; while(m<k) {  if(answer[m]==answer[k]||abs(answer[k]-answer[m])==abs(k-m))   return false;  m++; } return true;}void Queen::printResult()const{ for(int i=1;i<queens;i++) {     std::cout<<answer[i]<<"  "; } std::cout<<std::endl;}//use.cpp--test Queen class#include<iostream>#include"queen.h"int main(){ std::cout<<"Enter the queens:"; int m; std::cin>>m; Queen q=Queen(m); q.nqueens(); std::cout<<"Total methods: "; q.printSum(); std::cout<<"Done!\n"; return 0;}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.