《ACM程序设计》例题解析-N皇后问题
来源:互联网 发布:河北网络公益广告大赛 编辑:程序博客网 时间:2024/04/30 16:38
N皇后问题
题目大意
经典问题,N个皇后放在N*N的棋盘,互不攻击。
思路
回溯,每行放一个,O(N!)
格子合法的判断
数组
?列位置 col[N]
?左右对角线 lr[2*N-1]
?右左对角线 rl[2*N-1]
y-x+n-1
屏蔽位
row
ld
*图片来源于Matrix67的Blog
代码
数组判断格子合法
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <time.h>#include <assert.h>typedef __int64 LL;#define N 14int col[N],lr[2*N-1],rl[2*N-1];int cnt;int dfs(int *a,int k,int n){int i;if(k==n){cnt++;/*if(cnt < 10) {for(i=0;i<n;i++) printf("%d ",a[i]);printf("\n");}*/}else{for(i=0;i<n;i++){if(!col[i] && !lr[i-k+n-1] && !rl[k+i]){a[k] = i;col[i] = lr[i-k+n-1] = rl[k+i] = 1;dfs(a,k+1,n);col[i] = lr[i-k+n-1] = rl[k+i] = 0;}}}}int main(){int a[N];time_t begin,end;begin = clock();dfs(a,0,14);printf("%d\n",cnt);end = clock();printf("time:%.3f\n ",(end - begin)*1.0/CLOCKS_PER_SEC);return 0;}
利用屏蔽位
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <time.h>#include <assert.h>typedef __int64 LL;int cnt = 0;void dfs(int *a,int k,int n,int c,int l,int r){ int i,mask,t; if(k==n){ cnt++; /*if(cnt < 10) { for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); }*/ } else{ mask = c | l | r; for(i=0;i<n;i++){ t = 1<<i; if(~mask&t){ a[k] = i; dfs(a,k+1,n,c|t,(l|t)<<1,(r|t)>>1); } } } }int main(){ int a[20]; time_t begin,end; begin = clock(); dfs(a,0,14,0,0,0); printf("%d\n",cnt); end = clock(); printf("time:%.3f\n ",(end - begin)*1.0/CLOCKS_PER_SEC); //296 return 0;}
- 《ACM程序设计》例题解析-N皇后问题
- 《ACM程序设计》例题解析-HDU3711
- 《ACM程序设计》例题解析-PKU3187
- 《ACM程序设计》例题解析-PKU1731
- 《ACM程序设计》例题解析-UVa624
- ACM—N皇后问题
- [ACM] hdu 2553 N皇后问题
- ACM 搜索 HDU 2553 N皇后问题
- HDOJ 2553 N皇后问题 杭电 ACM
- N*N皇后问题
- 9.7例题:八皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- ACM -- 八皇后问题
- ACM--八皇后问题
- 《ACM程序设计》N题
- windows程序设计 例题解析 SYSMETS3
- N皇后问题
- “make: arm-none-linux-gnueabi-gcc:命令未找到”
- 【雅安加油】李克强清晨帐篷外接受采访:救人是第一位的
- 正则表达式基础(一)------字符组
- Android手机出现"已安装了存在签名冲突的同名数据包"的原因及解决办法
- 淘宝流量红利减少 淘品牌急寻突围路径
- 《ACM程序设计》例题解析-N皇后问题
- 在盈利狂潮中,苹果将粉身碎骨吗?
- poj_2387(最短路径Dijkstra)
- Android学习笔记
- 程序员
- 杭电2015
- 中国雅虎殒身记:当初说好的独立上市呢?
- UVa 10474 - Where is the Marble?
- vc mfc实现dialog半透明置顶效果