hdu 2553 N皇后问题(基本dfs)
2015-11-29 21:26
267 查看
思路:dfs解决,使每个皇后不在同一行、同一列、同一对角线。需要预处理,否则超时。
#include<stdio.h> #include<string.h> #include<stdlib.h> int n,ans; int map[15]; int visit[15]; int sol[15]; void dfs(int k) { int i,j,flag; if(k==n+1) { ans++; return; } for(i=1;i<=n;i++) if(!visit[i]) //各行棋子不能在同一竖 { map[k]=i; flag=1; for(j=1;j<=k-1;j++) //判断是否在同一斜线上 if((map[k]-map[j])==(k-j)||(map[k]-map[j])==(j-k)) { flag=0; break; } if(flag) { visit[i]=1; dfs(k+1); visit[i]=0; //释放第i列,进行下一次搜索 } } } int main() { int i; for(i=1;i<=10;i++) { ans=0; n=i; memset(map,0,sizeof(map)); memset(visit,0,sizeof(visit)); dfs(1); sol[i]=ans; } while(scanf("%d",&n),n) printf("%d\n",sol ); return 0; }
相关文章推荐
- 【C#】初识C#之 .NET Framework3.5简介
- [转]周易入门三十五问答
- LeetCode() Ugly Number II 背下来!
- 将timestamp类型转换为date类型
- 变量交换之数字交换
- jsp 颜色选择器调用
- 油菜花王国——搜索
- wireshark 开源网络数据包分析软件
- 分治算法之赛程安排问题
- UML---实现图
- linux 关机命令总结
- xml多层嵌套解析方法SAX方式(包括网络请求)
- JS array相关方法
- 递归与尾递归
- C++内存管理
- 【C语言提高03】变量本质
- SSH网上商城
- “南大软院大神养成计划“_第十四天的学习“
- 属性中的属性
- 2.0 Linux系统的安装之Fedora安装单系统(2)