USACO Section 1.5 Checker Challenge
来源:互联网 发布:运动鞋哪些牌子 知乎 编辑:程序博客网 时间:2024/05/18 02:17
题意:
N皇后问题 输出 字典序最小的3种解法 和 解的数量
思路:
dfs去放皇后判断和前面的皇后是否冲突
题目时间卡的超级很近!! 简单的搜索一定跪 能剪的地方要拼命剪枝!!
列举我的剪枝:
1.直接按字典序搜索 最先搜到的3个解保证字典序最小 直接输出
2.通过上几行皇后的放法 求出现在这行有几个位置能放皇后 之后进行搜索(这是关键!! 千万不要先搜位置然后判断能不能放 仔细体会差别 其实先搜放法可以降一次for)
代码:
/*ID: housera1PROG: checkerLANG: C++*/#include<cstdio>#include<cstring>#include<algorithm>#include<ctime>using namespace std;int n,ans;int vis[15];inline void dfs(int flr){int i,j;int qq[15]={0};if(flr>n){if(ans<3){printf("%d",vis[1]);for(i=2;i<=n;i++) printf(" %d",vis[i]);printf("\n");}ans++;return ;}for(j=1;j<flr;j++){qq[vis[j]]=1;if(vis[j]-(flr-j)>0) qq[vis[j]-(flr-j)]=1;if(vis[j]+(flr-j)<=n) qq[vis[j]+(flr-j)]=1;}for(i=1;i<=n;i++){if(!qq[i]){vis[flr]=i;dfs(flr+1);}}}int main(){int Debug=0;if(!Debug){freopen("checker.in","r",stdin);freopen("checker.out","w",stdout);}int i,j;scanf("%d",&n);dfs(1);printf("%d\n",ans);return 0;}
PS:
博主弱菜一根… 今天刚刷掉USACO第一部分…
本题其实还有剪枝方法:
1.剪掉对称部分最后结果乘2
2.对角线剪枝 利用“/”对角线 i+j=常数 “\”对角线i-j+MAXN=常数
3.用二进制数表示状态
0 0
- USACO Section 1.5 Checker Challenge
- USACO Section 1.5 Checker Challenge
- USACO section 1.5.4 Checker Challenge
- USACO section 1.5 Checker Challenge(dfs深搜)
- Section 1.5 Checker Challenge
- USACO 1.5 Checker Challenge (checker)
- USACO Section 1.5 Checker Challenge - 普普通通的皇后问题~~
- [usaco]1.5 Checker Challenge
- USACO 1.5.4 Checker Challenge
- [USACO 1.5.4] Checker Challenge
- usaco 1.5.4 Checker Challenge
- USACO 1.5 Checker Challenge (DFS)
- USACO 1.5 Checker Challenge (DFS + 剪枝)
- USACO 1.5 Checker Challenge (位操作)
- 【搜索】【USACO】Checker Challenge
- usaco Checker Challenge
- USACO:Checker Challenge
- USACO-Checker Challenge
- android LinearLayout布局中layout_weight的使用(二)
- (十)串的基本概念与串存储结构
- 孙鑫VC++(深入详解)视频教程
- vs2010 配置qt
- Android 4.0 Switch 控件用源代码实现
- USACO Section 1.5 Checker Challenge
- fgets和gets的区别
- fail-fast机制
- ANT详解
- Candy 分糖果
- github连接被拒绝的问题
- 导致DllMain中死锁的关键隐藏因子
- fail-fast机制
- 我们的梦想不会那么快就被打破