解題思路:
DFS
#include<iostream>
#include<cstring>
using namespace std;
//地圖
struct map
{
int v[10][10];
int t[10][10];
};
map m;
int no = 1;
void DFS(int i,int j,map c)
{
c.v[i][j] = 1;
//結果
if(i==8)
{
cout<<"No. "<<no<<endl;
for(int p=1;p<=8;p++)
{
for(int q=1;q<=8;q++)
cout<<c.v[q][p]<<" ";
cout<<endl;
}
no++;
return;
}
//列
for(int q=i;q<=8;q++)
c.t[q][j] = 1;
//斜線
int q = 1;
while(i+q<=8 && j+q<=8)
{
c.t[i+q][j+q] = 1;
q++;
}
int p = 1;
while(i+p<=8 && j-p>=1)
{
c.t[i+p][j-p] = 1;
p++;
}
//遞歸
for(int p=1;p<=8;p++)
if(c.t[i+1][p] == 0)
{
map a =c;
DFS(i+1,p,a);
}
return;
}
int main()
{
memset(m.v,0,sizeof(m.v));
memset(m.t,0,sizeof(m.t));
for(int i=1;i<=8;i++)
{
map r = m;
DFS(1,i,r);
}
return 0;
}