洛谷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; }