UVA750回溯法典例-八皇后
文章代码选自UVA750-8 Queens Chess Problem的部分代码
vj题目链接:https://vjudge.net/problem/UVA-750
由于UVA中要求按照字典序输出,下面代码进行的特殊处理
代码如下:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int rnum[];//rnum[x]:x列皇后的行编号
int solution[];
int cur=;
char aim[]; int pout()
{
sort(solution+,solution+);
printf("{");
int flag=;
for(int i=;i<;i++)
{
if(flag)printf(",");
flag=;
printf("%d",solution[i]);
}
printf("};");
//for(int i=1;i<93;i++)
// printf("%d->%d\n",i,solution[i]);
// printf("SOLN COLUMN\n");
// printf(" # 1 2 3 4 5 6 7 8\n\n");
// for(int i=1;i<93;i++)
// {
// printf("%2d ",i);
// //
// sprintf(aim,"%d",solution[i]);
// //printf("%d->%d\n",i,solution[i]);
// for(int k=0;k<8;k++)
// printf(" %c",aim[k]);
// printf("\n");
// }
return ;
} int solver(int c)
{
if(c==)
{//由于该问题的结果每一组只有八个数字,为方便打表这里组合成八位的int数
int snum=;
for(int i=;i<;i++)
snum=snum*+(rnum[i]);
solution[cur++]=snum;
//printf("->%d\n",snum);
}
else
{
for(int r=;r<=;r++)
{
rnum[c]=r;
int ok=;
for(int nc=;nc<c;nc++)
{
//rnum[nc]行nc列 与 rnum[c]行c列
//检查每一个列,是否有与该皇后同行的存在
if(rnum[nc]==rnum[c]||rnum[nc]-nc==rnum[c]-c||rnum[nc]+nc==rnum[c]+c)
{ok=;break;}
}//for
if(ok)solver(c+);
}//for
}//else
return ;
} int main()
{
memset(rnum,,sizeof(rnum));
memset(solution,,sizeof(solution));
memset(aim,,sizeof(aim));
solver();
pout();
return ;
}
运行上述代码,得到了结果如下:
{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
将其设计为数组初始化的形式,再按照UVA题目写程序:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;//下面的初始化直接将结果输入程序,减少时间
int cyc[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
char aim[][];
char psd[];
int pre()
{
memset(psd,,sizeof(psd));
for(int i=;i<;i++)
{
sprintf(&aim[i][],"%d",cyc[i]);
aim[i][]='\0';//重新分配成数组,方便检索
//printf("%s\n",&aim[i][1]);
}
return ;
} int main()
{
int n;
int x,y;
pre();
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&x,&y);
printf("SOLN COLUMN\n");
printf(" # 1 2 3 4 5 6 7 8\n\n");
int kase=;
char m=x+'';
for(int i=;i<;i++)
{
if(aim[i][y]==m)
{
printf("%2d ",++kase);
for(int k=;k<;k++)
printf(" %c",aim[i][k]);
printf("\n");
}
}
if(n!=)printf("\n");//注意空行问题,最后一组的最后没有空行
}
return ;
}
UVA750回溯法典例-八皇后的更多相关文章
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...
- C语言数据结构----递归的应用(八皇后问题的具体流程)
本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...
- java递归求八皇后问题解法
八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...
- Java编程思想—八皇后问题(数组法、堆栈法)
Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...
- LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...
- 八皇后,回溯与递归(Python实现)
八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...
- 回溯算法-C#语言解决八皇后问题的写法与优化
结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...
- 八皇后问题-回溯法(MATLAB)
原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...
- ACM:回溯,八皇后问题,素数环
(一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...
随机推荐
- thinkphp远程执行漏洞的本地复现
thinkphp远程执行漏洞的本地复现 0X00漏洞简介 由于ThinkPHP5 框架控制器名 没有进行足够的安全监测,导致在没有开启强制路由的情况下,可以伪装特定的请求可以直接Getshell(可以 ...
- CNN中的feature map
个人学习CNN的一些笔记,比较基础,整合了其他博客的内容 feature map的理解在cnn的每个卷积层,数据都是以三维形式存在的.你可以把它看成许多个二维图片叠在一起(像豆腐皮竖直的贴成豆腐块一样 ...
- 怎么用wait、notify巧妙的设计一个Future模式?
我们知道多线程可以实现同时执行多个任务(只是看起来是同时,其实是CPU的时间片切换特别快我们没感觉而已). 现在假设一个做饭的场景,你没有厨具也没有食材.你可以去网上买一个厨具,但是这段时间,你不需要 ...
- [jQuery]入口函数(一) jquery.min.js 一定要单线程下载,复制粘贴容易入坑
jQuery入口函数 等着DOM结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完毕 $(function () { // 此处是页面DOM加载完成的入口 }); $(document).rea ...
- [Linux]curl 测试socket http代理
Socket5 curl --socks5 10.2.46.19:10808 http://www.baidu.com #-----查询结果----- <!DOCTYPE html> &l ...
- 实用,Windows后台守护进程iNeuDaemon发布。Linux操作系统下使用使用supervisor
目 录 1. 概述... 1 2. iNeuDaemon部署... 2 3. iNeuDaemon配置监控服务项... 3 4. 应用效果... 3 ...
- [红日安全]Web安全Day1 - SQL注入实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- redis之master.slave主从复制
简介 主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主 从库配置 配置从库,不配主库 配置从库: 格式: slaveof 主库ip ...
- 简单的试了试async和await处理异步的方式
今天无意中就来试了试,感觉这个新的方法还是非常行的通的,接下来我们上代码 这段代码想都不用想输出顺序肯定是//null null 233,当然出现这个问题还是因为它是同步,接下来我们就进行异步方式来处 ...
- cjson库的移植和使用
cjson 下载链接 https://github.com/DaveGamble/cJSON 下载完成将其中的cJson.c cJson.h复制到自己的项目中引用即可: 1.字符串转json格式 cJ ...