洛谷P1219八皇后-题解
原题:

思路:
显然是搜索
但问题在于要同时标记行、列、对角线
对角线有规律:从左上到右下,x-y是固定值,从左下到右上,x+y是固定值
由于x-y有可能是负的,所以要+n
代码:
#include <iostream>
using namespace std;
int n,ans,book[233],djx_z[233],djx_f[233],arr[233];
void DFS(int dep)
{
if(dep>n)
{
ans++;
if(ans<=3)
{
for(int i=1;i<=n;i++)
cout << arr[i] << ' ';
cout << endl;
}
return;
}
for(int i=1;i<=n;i++)
{
if(book[i]==0&&djx_z[dep+i]==0&&djx_f[dep-i+n]==0)
{
arr[dep]=i;
book[i]=1;
djx_z[dep+i]=1;
djx_f[dep-i+n]=1;
DFS(dep+1);
book[i]=0;
djx_z[dep+i]=0;
djx_f[dep-i+n]=0;
}
}
}
int main()
{
cin >> n;
DFS(1);
cout << ans;
return 0;
}
浙公网安备 33010602011771号