zoukankan      html  css  js  c++  java
  • 回溯法n皇后问题

    n皇后问题
     1 /*
    2 n皇后问题
    3 k表示行号,x[k]表示列号
    4 */
    5 #include <iostream>
    6 #include <cmath>
    7 using namespace std;
    8 int x[100];
    9
    10 bool place(int k) //判断此位置是否可以放皇后
    11 {
    12 int i=0;
    13 while(i<k)
    14 {
    15 if( (x[i]==x[k]) || (abs(x[i]-x[k])==abs(i-k) ) )
    16 {
    17 return false;
    18 }
    19 i++;
    20 }
    21 return true;
    22 }
    23
    24 void nQueens(int n)
    25 {
    26 int k=0;
    27 x[k]=0;
    28 while(k>=0)
    29 {
    30 x[k]=x[k]+1; //皇后后移一列
    31 while( (x[k]<=n) && (place(k)==false) ) //确定第k行皇后的列数x[k]
    32 x[k]=x[k]+1;
    33 if(x[k]<=n) //若列号等于最后一列
    34 {
    35 if(k==n-1) //所有皇后位置已经全部确定
    36 {
    37 for(int i=0;i<n;i++)
    38 cout<<x[i]<<" ";
    39 cout<<endl;
    40 }
    41 else //否则,考虑下一个皇后
    42 {
    43 k++;
    44 x[k]=0; //初始化下一行的皇后的列号为0
    45 }
    46 }
    47 else
    48 k--; //当前行皇后无位置换,则将上一行皇后的位置重新摆放
    49 }
    50 }
    51
    52 int main()
    53 {
    54 int n;
    55 cout<<"输入皇后个数n:"<<endl;
    56 cin>>n;
    57 cout<<"输出结果:"<<endl;
    58 nQueens(n);
    59 return 0;
    60 }

    continue my dream...
  • 相关阅读:
    微信小程序 列表渲染 wx:for
    微信小程序获取数据、处理数据、绑定数据关键步骤记录
    jq获取页面距离
    jq中哪个方法有回调函数
    轮播图jq版
    计算器
    计算机基础
    安装LAMP
    ubuntu安装最新版本的node.js
    blade模版之页面的嵌套
  • 原文地址:https://www.cnblogs.com/chenbin7/p/2192973.html
Copyright © 2011-2022 走看看