八皇后问题

来源:互联网 发布:设置网络共享打印机 编辑:程序博客网 时间:2024/06/05 23:42

说起八皇后,还真让人有种高端的感觉,然而,当你认真去思考的时候,八皇后不过就是一个简单的搜索问题罢了!
问题描述:
同行同列和两条对角线都不能有两个皇后;
明显的搜索题目,好了,不多说啦,看代码,注释够详细

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<stdlib.h>#include<queue>#include<vector>#include<map>#include<ctime>#include<set> #include<stack>using namespace std;const int maxn=8;int queuen[maxn];//表示列位置int sum=0;void show()//输出皇后位置{    sum++;    for(int i=0; i<maxn; i++)    { printf("<%d,%d>",i+1,queuen[i]+1);        //cout<<i<<queuen[i]+1;    }    cout<<endl;}int check(int n)//检查是否含有皇后{    int i;    for( i=0; i<n; i++)    {        if(queuen[n]==queuen[i]||fabs(queuen[i]-queuen[n])==n-i)//同行同列,对角线是否含有皇后            return 1;    }    return 0;}void put(int n)//递归搜索{    if(n==maxn)//如果遍历完,则表示可放置皇后        show();    else    {        for(int i=0; i<maxn; i++)        {            queuen[n]=i;            if(!check(n))            {                put(n+1);            }        }    }}int main(){    put(0);//从坐标初始位置开始    cout<<sum<<endl;//输出所有情况    return 0;}
0 0
原创粉丝点击