思路见紫书= =
在这基础上增加了一个输出函数。
记得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;
}