• 八皇后问题


    问题描述:

    八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。

    代码如下:

     1 #include <iostream>
     2 #include <cstdlib>
     3 #include <string>
     4 
     5 using namespace std;
     6 
     7 int queen[1024];
     8 int sum;
     9 /**
    10  *八皇后问题 经典递归解法
    11 */
    12 // 打印皇后
    13 void printQ(int n) {
    14     for (int i = 0; i < n; i++) {
    15         for (int j = 0; j < n; j++) {
    16             if (queen[i] == j) {
    17                 cout << "Q ";
    18             }
    19             else {
    20                 cout << "* ";
    21             }
    22         }
    23         cout << endl;
    24     }
    25     
    26 }
    27 // 判断第i行皇后是否合适
    28 bool isValid(int i) {
    29     bool res = true;
    30     for (int j = 0; j < i; j++) {
    31         if (queen[j] == queen[i] || abs(queen[i] - queen[j]) == i - j) {
    32             res = false;
    33             break;
    34         }
    35     }
    36     return res;
    37 }
    38 // 放置皇后,表示把第i行的皇后放在第j列
    39 void placeQueen(int i,int queenCnt) {
    40     if (i == queenCnt) {
    41         cout << "" << sum + 1 << " 组的解为:" << endl;
    42         sum++;
    43         printQ(queenCnt);
    44         return;
    45     }
    46     for (int j = 0; j < queenCnt; j++) {
    47         queen[i] = j;
    48         // 如果第i行皇后放在第j列合法,则放下一行
    49         if (isValid(i)){
    50             placeQueen(i + 1, queenCnt);
    51         }
    52     }
    53 }
    54 
    55 int main()
    56 {
    57     unsigned int queenCnt;
    58     cout << "请输入皇后的个数:";
    59     cin >> queenCnt;
    60     placeQueen(0, queenCnt);
    61     cout << "一共 " << sum << " 解!" << endl;
    62     system("pause");
    63     return 0;
    64 }
    只为训练自己,时刻锤炼一个程序员最基本的技能!
  • 相关阅读:
    一、编程语言
    1、计算机基础
    四、格式化输出与基本运算符
    二、变量及用户与程序互交
    三、基本数据类型
    查看静态库中有哪些函数
    vs2010 error MSB6006: “cmd.exe”已退出,代码为 1
    ffmpeg formats
    C#启动一个外部程序(3)CreateProcess
    C#启动一个外部程序(2)ShellExecute
  • 原文地址:https://www.cnblogs.com/coding-wtf/p/6891601.html
Copyright © 2020-2023  润新知