USACO Section 1.5 Checker Challenge
2014-03-18 21:57
281 查看
/* ID: lucien23 PROG: checker LANG: C++ */ #include<stdio.h> #include<stdlib.h> #include<math.h> int N; int symPos; int sum=0; int count=0; bool isCountComplete=false; bool isPrintComplete=false; int *position; void generate(int row); int main() { freopen("checker.in","r",stdin); freopen("checker.out","w",stdout); scanf("%d",&N); symPos=N/2+N%2+1; position=(int*)malloc(N*sizeof(int)); generate(0); printf("%d\n",sum); free(position); return 0; } void generate(int row) { int *pPos=(int*)malloc(N*sizeof(int)); for(int i=0;i<N;i++) { pPos[i]=0; } for (int i=0;i<row;i++) { pPos[position[i]]=1; } for(int i=0;i<N;i++) {//第row行的棋子放在第i列 if(row==0) { if(N%2==0 && i==symPos-1) {//偶数列 sum*=2; isCountComplete=true; }else if(N%2==1 && i==symPos-2){ sum*=2; }else if (N%2==1 && i==symPos-1){ isCountComplete=true; } } if(isCountComplete && isPrintComplete) return; if(pPos[i]) continue; int k; for (k=0;k<row;k++) { if(abs(row-k)==abs(i-position[k])) break; } if(k<row) {//第row行的棋子不能放在第i列 continue; } position[row]=i; if(row==N-1) { count++; if(!isCountComplete) sum++; if(count<=3) { for (int j=0;j<N-1;j++) { printf("%d ",position[j]+1); } printf("%d\n",position[N-1]+1); if(count==3) isPrintComplete=true; } }else{ generate(row+1); } } free(pPos); }
相关文章推荐
- POJ 2187 凸包的最远欧几里得距离:旋转卡壳算法
- 第2周:计算圆的面积
- ListView排序并隔色显示
- fzu 2038图的遍历,递归求解
- 使用 Mono Develop 调试 U3D 脚本
- struts2多文件上传(修改名称、压缩图片、删除图片)
- 学习OpenCV范例(十三)——图像金字塔
- ContentProvider,SQLiteOpenHelper,SQLiteDatabase三者之间的区别和联系
- MVC 在控制器中获取某个视图动态的HTML代码
- 编程回忆之Android回忆(AnimationDrawable的使用)
- matlab 调试
- 说话内容做得好无非有几点,信息量大、逻辑严密、表达趣味。还有,学会闭嘴。文自/宗宁
- USACO Section 1.5 Superprime Rib
- 动态规划小结
- Eclipse安装ADT失败解决办法
- iframe去边框,无边框,使用大全
- HighCharts之2D折线图
- python学习笔记
- USACO Section 1.5 Prime Palindromes
- HighCharts之2D折线图