搜索入门--八皇后 P 1219
来源:互联网 发布:中国历史 知乎 编辑:程序博客网 时间:2024/06/03 17:10
题目描述
题目描述
检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。
上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是跳棋放置的一个解。请编一个程序找出所有跳棋放置的解。并把它们以上面的序列方法输出。解按字典顺序排列。请输出前3个解。最后一行是解的总个数。
//以下的话来自usaco官方,不代表洛谷观点
特别注意: 对于更大的N(棋盘大小N x N)你的程序应当改进得更有效。不要事先计算出所有解然后只输出(或是找到一个关于它的公式),这是作弊。如果你坚持作弊,那么你登陆USACO Training的帐号删除并且不能参加USACO的任何竞赛。我警告过你了!
输入输出格式
输入格式:一个数字N (6 <= N <= 13) 表示棋盘是N x N大小的。
输出格式:前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。
输入输出样例
输入样例#1:
6
输出样例#1:
2 4 6 1 3 53 6 2 5 1 44 1 5 2 6 34
说明
题目翻译来自NOCOW。
USACO Training Section 1.5
题解:就是按照对 每n列进行递归,查找,按照对x的从0到n,一直进行深搜,也就是对x=0,i=1 2 3....n-1 x=1,i=1,2,3....n-1;
所有的情况都进行了搜索, 再按照题意是 当前皇后的x轴 y轴, 正对角线轴,负对角线轴,存在有皇后(便继续深搜/停止 回溯),
其中 正对角线的判断是 [i-x+n] 负对角线为x+i
#include<iostream>#include<stdio.h>#include<string.h>#include<string>using namespace std;int map[20][20],pxy[20],pyx[40],ans[20],ansnum,px[20],py[20];int n;void search(int x){if(x==n){if(ansnum<3){for(int i=0;i<n;i++)printf("%d ",ans[i]+1);//cout<<ans[i]+1<<" "; //map[][]是从0开始printf("\n");}ansnum++;return;}for(int i=0;i<n;i++){if(pxy[i-x+n]==0&&pyx[i+x]==0&&px[i]==0&&py[x]==0) //分别是正对角线 负对角线 x轴 y轴的是否存在的情况{map[x][i]=1;px[i]=1,py[x]=1,pxy[i-x+n]=1,pyx[x+i]=1;ans[x]=i; //纪录第x个的答案search(x+1);//搜索下一列px[i]=0,py[x]=0,pxy[i-x+n]=0,pyx[x+i]=0;//回溯}}}int main(){scanf("%d",n);search(0);printf("%d",ansnum);//cout<<ansnum;//输出return 0;}
阅读全文
0 0
- 搜索入门--八皇后 P 1219
- luogu1219 [八皇后] 搜索
- 八皇后 入门经典
- 图的搜索-八皇后
- 八皇后问题 递归搜索
- 搜索之八皇后问题
- 【搜索】洛谷 P1219 八皇后
- DFS入门篇---八皇后!
- [洛谷1219]八皇后
- 【洛谷 1219】八皇后
- 八皇后问题_____递归线性搜索
- 搜索算法-讲解[八皇后问题]
- 局部搜索思想求解八皇后问题
- 八皇后问题之一(枚举+搜索)
- 八皇后__位运算优化搜索
- 八皇后问题与深度优先搜索
- //回溯法搜索八皇后问题
- 八皇后问题深度遍历搜索
- 棋盘放车(有些点不能放)(DP状态压缩)
- linux系统命令
- 解析xml模板导出Excel
- lwIP协议学习
- 在树莓派 raspberry pi 上搭建svn serve (svn 服务器)并存放在U盘中
- 搜索入门--八皇后 P 1219
- JavaWeb---制作验证码
- 磁盘
- 网站认证和授权(自定义权限)
- win7 VS2008 不需新建工程 命令行编译lua5.1.5
- 9.其它信息提供者之MultiProvider 与 InfoSet
- 训练日记-19
- VisualVM监视
- 【hpu oj 1022: 985的因子对难题 [数学]】