n皇后问题

来源:互联网 发布:云同步盘 linux 编辑:程序博客网 时间:2024/05/29 09:21
题目内容:
 国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问题来讲解程式设计之技巧。该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)

输出描述
输出结果

输入样例
8

输出样例
92

程序代码


#include <iostream>  using namespace std;#include <math.h>  int mmax,sum=0;  int x[16];  using namespace std;  //判断   bool Place(int n){      for(int i=1;i<n;i++){          if((x[i]==x[n]) || x[i]-x[n] == i - n || x[i] - x[n] == n - i){              return false;          }      }      return true;  }  //回溯   void Backtrack(int n){      int i;      for(i=1;i<=mmax;i++){          x[n]=i;          if(Place(n)){              if(n==mmax){                  sum++;              }              else{                  Backtrack(n+1);              }          }      }  }  //主函数   int main(){      cin>>mmax;      Backtrack(1);      cout<<sum;      return 0;  } 



原创粉丝点击