博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八皇后
阅读量:5821 次
发布时间:2019-06-18

本文共 1231 字,大约阅读时间需要 4 分钟。

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。而且仅当 n = 1 或 n ≥ 4 时问题有解。

#include<iostream>

using namespace std;

static int gEightQueen[8] = { 0 }, gCount = 0;

void print()//输出每一种情况下棋盘中皇后的摆放情况

  for (int i = 0; i < 8; i++)

    {   

        int inner;

        for (inner = 0; inner < gEightQueen[i]; inner++)

            cout << " ";

        for (inner = gEightQueen[i] + 1; inner < 8; inner++)

            cout << "";

        cout <<"#" << endl;

    }

    cout << "==========================\n";

}

int check_pos_valid(int loop, int value)//检查是否存在有多个皇后在同一行/列/对角线的情况

{

    int index;

    int data;

    for (index = 0; index < loop; index++)

    {

        data = gEightQueen[index];

        if (value == data)

            return 0;

        if ((index + data) == (loop + value))

            return 0;

        if ((index - data) == (loop - value))

            return 0;

    }

    return 1;

}

void eight_queen(int index)

{

    int loop;

    for (loop = 0; loop < 8; loop++)

    {

        if (check_pos_valid(index, loop))

        {

            gEightQueen[index] = loop;

            if (7 == index)

            {

                gCount++, print();

                gEightQueen[index] = 0;

                return;

            }

            eight_queen(index + 1);

            gEightQueen[index] = 0;

        }

    }

}

int main(int argc, char*argv[])

{

    eight_queen(0);

    cout << "total=" << gCount << endl;

    return 0;

}

转载于:https://www.cnblogs.com/lulu0726/p/5894332.html

你可能感兴趣的文章
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
关于Android四大组件的学习总结
查看>>
java只能的round,ceil,floor方法的使用
查看>>
由于无法创建应用程序域,因此未能执行请求。错误: 0x80070002 系统找不到指定的文件...
查看>>
新开的博客,为自己祝贺一下
查看>>
【CQOI2011】放棋子
查看>>
采用JXL包进行EXCEL数据写入操作
查看>>