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

    试题描述
     在N*N的方格棋盘放置N个皇,使得它们不相互攻击(即任意2个皇后不允许处在同一行,或同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种符合要求放置方法。
    输入
    输入中有一个正整数N≤20,表示棋盘和皇后的数量 
    输出
    为一个正整数,表示N个皇后的不同放置方法数。 
    输入示例
    5
    输出示例
    10
     

    回溯法。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 int queen[21];   //储存某一行的皇后在第几列 
     5 int n,ans;
     6 void search(int x)
     7 {
     8     if(x==n+1) ans++;   //全部搜索完毕 
     9     else
    10     {
    11         for(int i=1;i<=n;i++)   
    12         {
    13             queen[x]=i;   //第x行的皇后储存在第i列中 
    14             bool f=true;
    15             for(int j=1;j<x;j++)  //检查
    16             {
    17                 if(queen[x]==queen[j]/**/ || queen[j]==queen[x]-j+x /*正对角线*/|| queen[j]==queen[x]+j-x/*反对角线*/) {f=false;break;}   
    18             }
    19             if(f) search(x+1);   //如果一直没有退出,则说明在这个位置加一个皇后是没问题的,那么继续下一行 
    20         }
    21     }
    22 }
    23 int main()
    24 {
    25     scanf("%d",&n);
    26     search(1);
    27     printf("%d",ans);
    28     //system("pause");
    29     return 0;
    30 }
    N皇后问题
  • 相关阅读:
    C++——文件的读写
    我以我血荐轩辕——记徐家福教授的演讲
    文件命名
    面向对象
    关于函数
    php跨域发送请求原理以及同步异步问题
    关于iframe
    关于url
    cookie
    call和apply
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5685051.html
Copyright © 2011-2022 走看看