之前用DFS模板写的N皇后问题是采用打表的形式,先把皇后放好再遍历,这样做适合N小于11的问题,写洛谷的题的时候看到了这个N是大于11的,需要新的方法来解决,打表是不适用的。
P1219 [USACO1.5] 八皇后 Checker Challenge - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream> using namespace std; int n,m1[30],m2[30],m3[30],ans[15],res=0; void setvalue(int step,int j,int k){ ans[step]=j; m1[j]=k; m2[j+step]=k; m3[step-j+n]=k; } void dfs(int step){ if(step>n){ res++; if(res<=3){ for(int i=1;i<=n;i++) cout<<ans[i]<<" "; cout<<endl; } return; } for(int j=1;j<=n;j++){ if(m1[j] || m2[step+j] || m3[step-j+n]) continue; setvalue(step,j,1); dfs(step+1); setvalue(step,j,0); } } signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n; dfs(1); cout<<res<<endl; return 0; }
标签:int,res,30,拓展,step,DFS,皇后 From: https://www.cnblogs.com/accbulb/p/18013320