题目链接:http://poj.org/problem?id=3239

构造法很牛逼啊,把这个搜索的题直接变成了打表。

我用dfs写了一下。

构造法公式(序列):
一、当n mod 6 != 2 或 n mod 6 != 3时:

[2,4,6,8,...,n],[1,3,5,7,...,n-1]        (n为偶数)

[2,4,6,8,...,n-1],[1,3,5,7,...,n ]       (n为奇数)
二、当n mod 6 == 2 或 n mod 6 == 3时

(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)

[k,k+2,k+4,...,n],[2,4,...,k-2],[k+3,k+5,...,n-1],[1,3,5,...,k+1]         (k为偶数,n为偶数)
[k,k+2,k+4,...,n-1],[2,4,...,k-2],[k+3,k+5,...,n-2],[1,3,5,...,k+1],[n]     (k为偶数,n为奇数)
[k,k+2,k+4,...,n-1],[1,3,5,...,k-2],[k+3,...,n],[2,4,...,k+1]              (k为奇数,n为偶数)
[k,k+2,k+4,...,n-2],[1,3,5,...,k-2],[k+3,...,n-1],[2,4,...,k+1],[n ]      (k为奇数,n为奇数)

这个规律我是没有搞懂的,反正很牛就是了。

我也用dfs写了一下,虽然我知道肯定会T,DFS30层就爆栈了,更何况这里是300层,就当是熟悉一下DFS了。

两种方法贴上。

#include <stdio.h>
#include <string.h> int n;
int ans = ;
int maps[][] = {}; bool judge(int k,int i)
{
for(int j=; j<=n&&j!=i; j++)
if(maps[k][j]==)
return false; for(int j=; j<=n&&j!=k; j++)
if(maps[j][i]==)
return false; for(int j=; k+j<=n&&i+j<=n; j++)
{
if(maps[k+j][i+j]==)
return false;
} for(int j=; k-j>=&&i-j>=; j++)
{
if(maps[k-j][i-j]==)
return false;
} for(int j=; k-j>=&&i+j<=n; j++)
{
if(maps[k-j][i+j]==)
return false;
} for(int j=; k+j<=n&&i-j>=; j++)
{
if(maps[k+j][i-j]==)
return false;
} return true;
} bool dfs(int k)
{
if(k>n)
{
ans ++;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(maps[i][j])
printf("%d",j);
}
}
printf("\n");
return true;
} for(int i=; i<=n; i++)
{
if(judge(k,i))
{
maps[k][i] = ;
if(dfs(k+))
return true;
maps[k][i] = ;
}
}
return false;
} int main()
{
while(scanf("%d",&n),n)
{
memset(maps,,sizeof(maps));
for(int i=; i<=n; i++)
{
maps[][i] = ;
if(dfs())
break;
maps[][i] = ;
}
//printf("%d\n",ans);
}
return ;
}
#include <stdio.h>

int main()
{
int n;
while(scanf("%d",&n),n)
{
if(n%!=&&n%!=)
{
if(n%==)
{
for(int i=;i<=n;i+=)
printf("%d ",i);
for(int i=;i<=n-;i+=)
printf("%d ",i);
printf("%d\n",n-);
}
else {
for(int i=;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=n-;i+=)
printf("%d ",i);
printf("%d\n",n);
}
}
else
{
if(n%==)
{
int k=n/;
if(k%==)
{
for(int i=k;i<=n;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
for(int i=k+;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
printf("%d\n",k+);
}
else
{
for(int i=k;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
for(int i=k+;i<=n;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
printf("%d\n",k+);
}
}
else
{
int k=(n-)/;
if(k%==)
{
for(int i=k;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
for(int i=k+;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k+;i+=)
printf("%d ",i);
printf("%d\n",n);
}
else
{
for(int i=k;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k-;i+=)
printf("%d ",i);
for(int i=k+;i<=n-;i+=)
printf("%d ",i);
for(int i=;i<=k+;i+=)
printf("%d ",i);
printf("%d\n",n);
}
}
} }
return ;
}

Poj (3239),m皇后问题的更多相关文章

  1. Poj 3239 Solution to the n Queens Puzzle

    1.Link: http://poj.org/problem?id=3239 2.Content: Solution to the n Queens Puzzle Time Limit: 1000MS ...

  2. POJ 1321 棋盘问题【DFS/回溯/放与不放/类似n皇后】

    棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62164 Accepted: 29754 Description 在一 ...

  3. [poj百练]2754:八皇后 回溯

    描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后 ...

  4. POJ - 1321 棋盘问题 dfs分层搜索(n皇后变式)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 47960   Accepted: 23210 Descriptio ...

  5. Poj 1321 棋盘问题 【回溯、类N皇后】

    id=1321" target="_blank">棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...

  6. bzoj 3239 poj 2417 BSGS

    BSGS算法,预处理出ϕ(c)−−−−√内的a的幂,每次再一块一块的往上找,转移时将b乘上逆元,哈希表里O(1)查询即可 #include<cstdio> #include<cstr ...

  7. POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))

    周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1 ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. OpenJudge/Poj 1321 棋盘问题

    1.链接地址: http://bailian.openjudge.cn/practice/1321 http://poj.org/problem?id=1321 2.题目: 棋盘问题 Time Lim ...

随机推荐

  1. NET CORE Learning

    ASP.NET Core 基础教程https://www.cnblogs.com/lonelyxmas/tag/ASP.NET%20Core%20%E5%9F%BA%E7%A1%80%E6%95%99 ...

  2. informix(南大通用)sql语法的差异

    1.create view  444(...)  as select ...from... 2.insert into select.......union  select     不支持 请分开写 ...

  3. ColorCtr控制颜色渐变

    ColorCtr控制颜色渐变 public class ColorCtr : MonoBehaviour { public static global_color Instance;         ...

  4. Murano Weekly Meeting 2016.07.26

    Meeting time: 2016.July.26 1:00~2:00 Chairperson:  Nikolay_St, from Mirantis Meeting summary: 1.Masc ...

  5. Day4上午

    expect100+50+50, In fact 100+10+0. 代码能力还有待提高,部分分应该能拿的.结果...力不从心啊. T1 贪心做的不知对不对. 看来思路是对的,不知道能不能对. 暴力做 ...

  6. Git提交代码到主分区

    git 提交代码,本地新建一个my分支,不从本地master分支直接上传,而是先从本地my分支上提交至本地master分支,然后本地master提交至远程master分支 上.前提是远程只有一个mas ...

  7. crypto-js遇到的坑

    最近在做H5网站,用websocket跟后台交互时,需要对数据进行加密,于是选了crypto-js组件,GitHub上api也不少,写的也清晰,但实际使用上会遇到不少坑: 加密解密时,传入的密钥key ...

  8. qingdao

    1001 #include <bits/stdc++.h> using namespace std; vector<long long> v; long long pow2(l ...

  9. maven课程 项目管理利器-maven 3-7 maven依赖范围 2星

    本节主要讲了maven的依赖范围: 在pom.xml   dependency标签的scope中.eclipse中有编译的路径,maven中有编译,运行,测试的路径. 1 scope为test,为测试 ...

  10. C#开发短信的方法和简介(转)

    http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=6337(来自) 自己收藏哈子