记一次坑die(误)的题目--HDU2553--(DFS)

,N皇后问题

 
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 720 Accepted Submission(s): 417

Problem Description

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。


Input

共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。


Output

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。


Sample Input

1
8
5
0

Sample Output

1
92
10

Author

cgf


Source

2008 HZNU Programming Contest


Recommend

lcy

一道搜索的经典题目, 特别水, 但坑了我半天.

交了三遍一直超时, 但这道题实在想不出有好的优化方法....只得祭出终极神器----"打表"....(汗)

46ms过, 汗.....坑die(误)...

这得有多少重复的测试数据啊....

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<map>
 7 #include<iomanip>
 8 #include<queue>
 9 #define INF 0x7ffffff
10 #define MAXN 15
11 using namespace std;
12 const double eps=1e-10;
13 int res;
14 int m[MAXN][MAXN];
15 int n;
16 int xx,yy;
17 int num[MAXN];
18 bool ok(int x,int y)
19 {
20     for(int i=1;i<=n;i++){
21         if(m[x][i]&&i!=y)
22             return 0;
23     }
24     xx=x;yy=y;
25     while(xx<n&&yy<n){
26         xx+=1; yy+=1;
27         if(m[xx][yy])
28             return 0;
29     }
30     xx=x;yy=y;
31     while(xx>1&&yy>1){
32         xx-=1;yy-=1;
33         if(m[xx][yy])
34             return 0;
35     }
36     xx=x;yy=y;
37     while(xx<n&&yy>1){
38         xx++; yy--;
39         if(m[xx][yy])
40             return 0;
41     }
42     while(x>1&&y<n){
43         x--;y++;
44         if(m[x][y])
45             return 0;
46     }
47     return 1;
48 }
49 void dfs(int x,int y)
50 {
51     if(ok(x,y)){
52         if(y==n){
53             res++;
54             return;
55         }
56         for(int i=1;i<=n;i++){
57             m[i][y+1]=1;
58             dfs(i,y+1);
59             m[i][y+1]=0;
60         }
61     }
62     else return;
63 }
64 void set()
65 {
66     for(int i=1;i<=10;i++){
67         n=i;
68         res=0;
69         dfs(0,0);
70         num[i]=res;
71     }
72 }
73 int main()
74 {
75     #ifndef ONLINE_JUDGE
76     freopen("data.in", "r", stdin);
77     #endif
78     std::ios::sync_with_stdio(false);
79     std::cin.tie(0);
80     set();
81     while(cin>>n&&n!=0){
82 //        memset(m,0,sizeof(m));
83 //        res=0;
84 //        dfs(0,0);
85         cout<<num[n]<<endl;
86     }
87 }
时间: 2024-10-22 19:55:01

记一次坑die(误)的题目--HDU2553--(DFS)的相关文章

预言择天记最大的坑!陈长生到底是谁!

首先我要说,老猫的书要看很多段子,要把很多看似不经意的段子记起来,最终才能汇成一条线,而此斯内心极为阴暗,经常为自己埋下的高明伏笔得意洋洋,一但被人猜到或者拆穿说不定会推到重来,所以本人就不赌JJ了,以免抱憾终生! 下面是本人摘录的段子,最终指向一个问题,然后得出一个答案,那就是陈长生是谁!.............1.序言 这条黄金巨龙已经度过了极为漫长的岁月,拥有难以想象的智慧,然而此时那只木盆,却似乎是它无法解开的难题--它眼瞳里的情绪变得越来越复杂,有渴望,也有警惕,犹豫,最后变成了挣扎

记一次rm的误操作

记录一次我在linux下的瓜皮操作吧,这次是乱用rm -rf 导致. 起因是我用vim编辑配置文件后,wq后面接了~然后回车,这样保存后,该路劲下多了一个~文件.一开始我觉得是以~创建了一个文件而已,没多想就直接rm -rf  ~了,当时没什么事,接着再次编辑文档保存退出时发现,会提示E138: Can't write viminfo file /root/.viminfo!,然后想着进入root的家目录看看,发现此时root家目录已经不存在了,顿时恍然大悟. 百度了下,发现不止我遇到过这种问题

java.util.ConcurrentModificationException 记一次坑

集合在单线程,一个循环内,有添加又删除会出现此异常. 多线程时,在不同的循环操作同一个集合,会出现此异常. 因为,集合长度发生改变时,在迭代器未结束前,迭代器的大小不会发生变化. 1.保证在同一个进程 或 锁 2.保证迭代中只有一种操作 3.集合.remove() 每次迭代只能remove一个元素 4.迭代器.remove()要满足条件1.2 原文地址:https://www.cnblogs.com/verlout/p/9805934.html

有关mac下安装双系统的。。。坑?

前言:我装win系统的原因很简单,就是某天突然想玩qq宠物了(不要嘲笑,自行尴尬一波)... 下面进入正题: 1.我的当前系统版本: 其实App Store 上新版本的os系统也已经出来很长一段时间了(如下图),不过看了网上的一些评论,以及身边朋友的亲身实践(被坑),本人对新版本还是持观望态度,所以暂时不予考虑. 2.windows ISO镜像文件 这里要首先提醒一下,新版本的Mac已经不支持win8以下的系统了,所以和我一样版本但喜欢win7的小伙伴们要失望了,因为你是用不上win7了,除非(

HDU 1011 Starship Troopers 树形DP 有坑点

本来是一道很水的树形DP题 设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益 结果wa了一整晚 原因: 坑点1: 即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派一个人去这个节点,不然谁帮你去拿收益? 坑点2: 题目说是从节点1开始攻打,然后我就以为给出的数据都是以1为根节点的,就没有加双向边 不过, 最后我加了双向边,然后还是wa了 又找了很久,最后发现是前向星的数组开小了 注意:数组开小了可能会返回wa,tle,re等等等等 1 #include<cst

Leetcode题解 - DFS部分题目代码+思路(756、1034、1110、491、721、988)

756. 金字塔转换矩阵 """ 学到的新知识: from collections import defaultditc可以帮我们初始化字典,不至于取到某个不存在的值的时候报错.例如列表类型就会默认初始值为[],str对应的是空字符串,set对应set( ),int对应0 思路: 通过本层构建上一层(DFS,类似于全排列),看是否能构建成功(递归) """ from collections import defaultdict class Sol

[CodeChef - GERALD07 ] Chef and Graph Queries

Read problems statements in Mandarin Chineseand Russian. Problem Statement Chef has a undirected graph G. This graph consists of N vertices and M edges. Each vertex of the graph has an unique index from 1 to N, also each edge of the graph has an uniq

又是随笔,连随笔都越来越少了。。。

自从进了新公司,整个人都像被掏空了,好疲倦.一开始是对公司框架不熟,对MVC.Linq.EF不熟,对各种JS调用不熟,对视图的一些公司特有写法不熟.转正后,接手了一个旧项目的UI改版,说是改版,实际上相当于二次开发了,无数的坑,加上带实习生开发,要帮他们找Bug.好在我写好一个示例,他们能照着写.一个月前又接手了个新项目,催的比较急,这几个周末都在加班,晚上弄到半夜,不过新项目还是更好搞. 老婆前几天生了个女孩,看公司项目这么紧,也就没休假了.周六上午还去加班的,十点电话催我回来说是进产房了,十

第三届蓝桥杯 c/c++真题

第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多循环的只是,还有模拟,动态规划的只是. 其中做题过程中,也有了一些新的体会.起初做代码填空题的时候我没办法知道自己做的是对还是错,就跑到网上查答案,后来发现,题目已经给出了代码,起始我们可以自己加上头文件,然后把空缺的代码加上进行调试的,这样就可以验证自己补充的代码是否正确了. 此外在进行调试的时候