八皇后问题 递归求解法

简介:

#include <iostream>
#include <fstream>
#include <string.h>

/**
八皇后问题递归方法实现
*/
using namespace std;

ofstream file;

//用以计数计算结果的数目
int count = 1;
/**
打印的棋盘其中打印1的位置是皇后的位置,0空位。
这里因为在控制台看不到全部,所有做了在文件中输出所有的解
*/
int print_Chessboard(int chessboard[][8])
{

    file.open("data.txt",ofstream::app|ofstream::out);
    file<<"答案:"<<count<<endl;
    cout<<"答案:"<<count<<endl;
    count++;
    for(int row = 0; row < 8;row++)
    {
        for(int column = 0;column<8;column++)
        {
            file<<chessboard[row][column]<<" ";
            cout<<chessboard[row][column]<<" ";
        }
        file<<endl;
        cout<<endl;
    }
     file<<endl<<endl;
     cout<<endl<<endl;
     file.close();
}
/**
参数一将棋盘信息传入函数,
参数二将要放入的皇后的行数传入
参数三将要放入的皇后的列数传入
若皇后放入成功则返回1,若失败则返回0
*/
int check_Chessboard(int chessboard[][8],int row,int column)
{
    //1、首先检查行数和列数是否已经超出棋盘的局限,若超出了
    //说明前边已经都符合位置,此时返回成功系数1
    if(row>=8)
    {
        //打印结果
        print_Chessboard(chessboard);
        return 1;
    }

    //2、检查在这一列上是否有皇后,正上方
    for(int i = 0; i < row;i++)
    {
        if(chessboard[i][column]==1)
        return 0;
    }
    //3、检查在左上和右上斜对角上是否有皇后
    //左上45度
    for(int i=row-1,j=column-1;i>=0&&j>=0;i--,j--)
    {
        if(chessboard[i][j]==1)
        return 0;
    }
    //右上45度
    for(int i=row-1,j=column+1;i>=0&&j<8;i--,j++)
    {
        if(chessboard[i][j]==1)
        return 0;
    }
    //到这里说明摆放成功
    //摆放成功后把这个位置标记为1
    chessboard[row][column]=1;

    //循环的检查下一行的没一个位置
    for(int i = 0; i < 8; i++)
    {
        if(check_Chessboard(chessboard,row+1,i)==0)
        continue;
        else break;
    }
    //若没有摆放成功就返回0;此时需要把该位置重新置为0
    chessboard[row][column]=0;
    return 0;
}
//主调函数
int main()
{
    int chessboard[8][8];

    for(int i = 0; i < 8; i++)
    {
        memset(chessboard,0,sizeof(chessboard));
        check_Chessboard(chessboard,0,i);
    }
    return 0;
}
复制代码

 

以下是运行结果,答案共有92中摆放方法

View Code










本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/archive/2012/08/23/2652083.html  ,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 编解码 算法
英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测
英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测
555 0
|
JavaScript 前端开发 Shell
用shell脚本写一个坦克大战的游戏的思路
用shell脚本写一个坦克大战的游戏思路
469 1
|
Shell
shell中并发执行多个进程
shell中并发执行多个进程
1403 4
|
人工智能
AI 古籍修复的意义
AI 古籍修复的意义
378 0
|
11月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
733 4
国产数据实战之docker部署MyWebSQL数据库管理工具
如何绘制PAD图和N-S图(详细步骤)
如何绘制PAD图和N-S图(详细步骤)
1587 0
|
11月前
|
存储 前端开发 搜索推荐
ClkLog基于ClickHouse 的百万日活实测报告
自 ClkLog 上线以来,我们不断吸纳用户需求,提升产品的支持能力。今年下半年,我们遇到了日活跃用户数达到百万级别的客户。为了给 ClkLog 用户提供可靠的技术建议和解决方案,同时也为了节省成本,在Clickhouse官方支持下,我们在阿里云上对 ClickHouse 社区版、企业版进行了详细测试和成本分析。
|
存储 算法 数据挖掘
【贪心算法经典应用】哈夫曼编码原理与算法详解 python
【贪心算法经典应用】哈夫曼编码原理与算法详解 python
|
存储 算法
数字三角形(很经典的动态规划问题)
数字三角形(很经典的动态规划问题)
|
机器学习/深度学习 算法 数据挖掘
机器学习 基于IRIS鸢尾花数据集进行聚类分析
机器学习 基于IRIS鸢尾花数据集进行聚类分析
892 0
机器学习 基于IRIS鸢尾花数据集进行聚类分析