HDU2553 N皇后问题(回溯法)
来源:互联网 发布:淘宝搜索什么能看片 编辑:程序博客网 时间:2024/04/27 12:35
此题是经典的N皇后问题,描述:在一个N*N的棋盘上要摆放N个皇后,要求任意两个皇后不能在同一行,同一列或者同一条与棋盘的边成45度角的斜线上,即与对角线平行的斜线上,求对于不同的N,各有多少种摆法使任意两个皇后不能相互攻击。
用回溯法就可以解决,设皇后的编号依次为1,2,……,n,则可以认为第i个皇后必须摆放在第i行,然后枚举第一个皇后的位置进行回溯,若某一次发现某个皇后无法找到摆放位置则直接返回,如果所有皇后都可以找到摆放位置,则说明存在一种摆法满足要求,统计有多少种摆法即可。
此题n<=10,测试数据中会有大量重复数据,因此要保存答案,遇到曾经计算过的n直接输出即可,否则可能会超时。
#include<iostream>using namespace std;int n;int x[100];int ans[11];bool Place(int k){int i = 1;while (i<k){if (x[i]==x[k] || abs(x[i]-x[k])==abs(i-k))return false;i++;}return true;}int main(){int k, cnt;memset(ans, 0, sizeof(ans));while (scanf("%d", &n)!=EOF && n!=0){if (ans[n]>0) {printf("%d\n", ans[n]);continue;}x[1] = 0;k = 1, cnt = 0;while (k>0){x[k]++;while (x[k]<=n && !Place(k)){x[k]++;}if (x[k]<=n){if (k==n){cnt++;}else {k++;x[k] = 0;}}else k--;}ans[n] = cnt;printf("%d\n", cnt);}return 0;}
- HDU2553 N皇后问题(回溯法)
- HDU2553 N皇后问题【回溯法】
- hdu2553 N皇后问题(回溯dfs)
- hdu2553-N皇后问题.回溯
- HDU2553 N皇后问题(回溯)
- HDU2553-回溯-N皇后问题
- HDU2553 - n皇后(回溯法)
- HDU2553 N皇后问题(回溯+打表)
- N皇后问题(hdu2553)
- hdu2553(N皇后问题)
- hdu2553 N皇后问题
- HDU2553 N皇后问题
- HDU2553:N皇后问题
- hdu2553 n皇后问题
- hdu2553 N皇后问题
- hdu2553 n皇后问题
- HDU2553 N皇后问题
- N皇后问题 hdu2553
- 对python元类概念的理解
- Android Application Class Lifecycle
- 正则表达式 2
- JNDI的作用是什么
- JAVA基础之理解JNI原理
- HDU2553 N皇后问题(回溯法)
- html 强制换行
- Measure data roaming traffic on Android?
- 利用SPring AOP配置切面的一个例子
- Android笔记(3)——系统时间的获取与音量控制
- hdu 3666 THE MATRIX PROBLEM //2010哈尔滨现场赛
- DataGridView的一般用法(1)
- Windows 电脑命令一览
- MSSQL设计主键类型