数学回味系列之2 - 八皇后问题

本文介绍了一个经典问题——八皇后问题的解决方案。该问题要求在8×8的棋盘上放置8个皇后,使得任意两个皇后不在同一行、列或对角线上。文章提供了一段C++代码实现,通过递归回溯的方法找出所有可行的摆放方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.

        经典的八皇后问题:

       在一个8*8的棋盘上放8个皇后,使得这8个皇后无法互相攻击( 任意2个皇后不能处于同一行,同一列或是对角线上),输出所有可能的摆放情况。

       代码如下:

       定义 queen[row] = col 表示 第 row 行对应的皇后 放在第 col 列。

/* linolzhang 2009.09
   eight queen
*/

#include <iostream>
#define Gird_Size 8

using namespace std;

int queen[Gird_Size]; // define queen in row [i] -> col number
void print_result()
{
    for(int row=0; row<Gird_Size; row++)
    {
        for(int col=0; col<Gird_Size; col++)
        {
            if(queen[row] == col)
            	cout<<"1 ";
            else 
            	cout<<"0 ";
        }
        cout<<endl;
    }
    cout<<endl;
}
void eight_queen(int row)
{
    if(row == Gird_Size)
    {
        print_result(); // result++
        return;
    }
    for(int i=0; i<Gird_Size; i++)
    {
        queen[row] = i;
        bool bReady = true;
        for(int j=0; j<row; j++)
            if(queen[row]==queen[j] || row-j==queen[row]-queen[j] || row-j==queen[j]-queen[row])
            {
                bReady = false;
                break;
            }
        if(bReady)
        	eight_queen(row+1);
    }
}
int main()
{
    eight_queen(0);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值