八皇后问题C++

思路见紫书= =

在这基础上增加了一个输出函数。

记得vis的数组一定要开的稍微大一些。毕竟8+8=16.

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int vis[3][20];
int C[10],tot;
void print(){
    printf("No. %d\n",tot);
    for(int i=0; i<8; ++i){
        for(int j=0; j<8; ++j){
            if(j == C[i]) cout<<"1 ";
            else cout<<"0 ";
        }
        cout<<endl;
    }
}
void search_(int cur)
{
    if(cur==8)
    {
        tot++;
        print();
    }
    else for(int i=0;i<8;i++)
    {
        if(!vis[0][i]&&!vis[1][cur+i]&&!vis[2][cur-i+8]){
            C[cur]=i;
            vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=1;
            search_(cur+1);
            vis[0][i]=vis[1][cur+i]=vis[2][cur-i+8]=0;
        }
    }
}
int main()
{
    memset(vis,0,sizeof(vis));
    tot=0;
    search_(0);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zero_979/article/details/81200553