八皇后问题(牛人非递归版)

八皇后问题解法
本文介绍了一种解决八皇后问题的非递归方法,并通过C++实现。利用STL中的next_permutation函数来生成所有可能的棋盘布局,并检查是否满足不相攻击的条件。
原文链接:《八皇后问题的非递归解法》

     想不服都不行,实在是太牛的代码,诡异的算法思路,出神入化的STL技巧。。。

复制代码
#include <cmath>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int MAX = 8;

vector<int> board(MAX);

void show_result()
{
    for(size_t i = 0; i < board.size(); i++)
        cout<<"("<<i<<","<<board[i]<<")";
    cout<<endl;
}

int check_cross()
{
    for(size_t i = 0; i < board.size()-1; i++)
    {
        for(size_t j = i+1; j < board.size(); j++)
        {
            if((j-i) == (size_t)abs(board[i]-board[j]))
                return 1;
        }
    }
    return 0;
}

void put_chess()
{
    while(next_permutation(board.begin(), board.end()))
    {
        if(!check_cross())
        {
            show_result();
        }
    }
}

int main()
{
    for(size_t i =0; i < board.size(); i++)
        board[i] = i;
    put_chess();
    return 0;
}
复制代码

本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/11/04/1326614.html,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值