经典问题:8皇后

来源:互联网 发布:淘宝女包店铺简介 编辑:程序博客网 时间:2024/06/18 05:39

8皇后是一个经典问题,大意就是8*8的棋盘上放8个皇后棋子,其中这八个棋子不同行不同列不同斜线。看了很多解题的方法,这里先记录一种。

分析见代码:

#include <iostream>using namespace std;int sum;//打印函数void print(int result[]){    for(int i = 0;i < 8;i++)    {        for(int j = 0;j < result[i];j++)            cout<<"* ";        cout<<"# ";        for(int j = result[i] + 1;j < 8;j++)            cout<<"* ";        cout<<endl;    }    cout<<"----------------"<<endl;    sum++;}//检查第x行第result[x]列是否可以bool check(int result[],int x){    for(int i = 0;i < x;i++)    {        //不同行不同列不同斜线        if(result[i] == result[x] || abs(result[i] - result[x]) == (x - i))            return false;    }    return true;}//递归求所有解void queen(int result[],int x){    if(x == 8)    {        print(result);        return ;    }    for(int i = 0;i < 8;i++)    {        result[x] = i;        if(check(result,x))        {            //递归求解            queen(result,x + 1);        }    }}int main(){    int result[8] = {0};    queen(result,0);    cout<<sum;    return 0;}


1 0
原创粉丝点击