2016sdau课程练习专题二 1019
2016-04-23 18:40
260 查看
1.题目编号
1019
2.简单题意
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。<br>你的任务是,对于给定的N,求出有多少种合法的放置方法。
3.思路
就是考虑一下皇后放置的位置,每一行都要枚举每个可以放置皇后的位置,并且判断这个位置是否与前一个放置好的位置相冲突,若冲突则此位置不合适,若不冲突则进行下一行的枚举,直至n行
4.感想
深度搜索的问题,虽然做过一下,还有老师例题的引导,但还是很懵圈啊
5.代码
#include<stdio.h>
#include<string.h>
int n,tmp;
int map[11];
void DFS(int k)
{
int i,j,flag;
if(k==n+1)
{
tmp++;
return;
}
else
{
for(i=1;i<=n;++i)
{
map[k]=i;
flag=1;
for(j=1;j<k;++j)
{
if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)
{
flag=0;
break;
}
}
if(flag)
DFS(k+1);
}
}
}
int main()
{
int i,m;
int ans[11];
for(n=1;n<=10;++n)
{
tmp=0;
DFS(1);
ans
=tmp;
}
while(scanf("%d",&m),m)
{
printf("%d\n",ans[m]);
}
return 0;
}
1019
2.简单题意
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。<br>你的任务是,对于给定的N,求出有多少种合法的放置方法。
3.思路
就是考虑一下皇后放置的位置,每一行都要枚举每个可以放置皇后的位置,并且判断这个位置是否与前一个放置好的位置相冲突,若冲突则此位置不合适,若不冲突则进行下一行的枚举,直至n行
4.感想
深度搜索的问题,虽然做过一下,还有老师例题的引导,但还是很懵圈啊
5.代码
#include<stdio.h>
#include<string.h>
int n,tmp;
int map[11];
void DFS(int k)
{
int i,j,flag;
if(k==n+1)
{
tmp++;
return;
}
else
{
for(i=1;i<=n;++i)
{
map[k]=i;
flag=1;
for(j=1;j<k;++j)
{
if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)
{
flag=0;
break;
}
}
if(flag)
DFS(k+1);
}
}
}
int main()
{
int i,m;
int ans[11];
for(n=1;n<=10;++n)
{
tmp=0;
DFS(1);
ans
=tmp;
}
while(scanf("%d",&m),m)
{
printf("%d\n",ans[m]);
}
return 0;
}
相关文章推荐
- 是时候学习一波Lambda表达式了
- 查询数据库的 sql语句 返回字段 和类 属性的关系
- 记一次给公司服务器装第二块硬盘的经历
- Codeforces 424C(异或)
- Android应用程序资源的编译和打包过程分析
- tomcat学习之server.xml
- 学习 1.预编译 (gcc -E), 编译 (gcc), 汇编 (as),和 连接 (ld)
- 杭电ACM2004
- bzoj 1831: [AHOI2008]逆序对
- 使用Android Studio阅读整个Android源码
- Android 仿微信群聊头像
- Android事件分发——ViewGroup篇
- 新人刚开始学习java总结一下StringBuffer和StringBuilder的区别及一些知识,不对的地方还望大家指出让我早日改正
- 算法情缘
- CodeForces - 424B (贪心算法)
- 携程Android App插件化和动态加载实践
- 搜索总结
- IDA 6.1调试驱动
- Java this的一两点使用
- Codeforces 424A (思维题)