文章代码选自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回溯法典例-八皇后的更多相关文章

  1. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...

  2. C语言数据结构----递归的应用(八皇后问题的具体流程)

    本节主要讲八皇后问题的基本规则和递归回溯算法的实现以及具体的代码实现和代码分析. 转载请注明出处.http://write.blog.csdn.net/postedit/10813257 一.八皇后问 ...

  3. java递归求八皇后问题解法

    八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处 ...

  4. Java编程思想—八皇后问题(数组法、堆栈法)

    Java编程思想-八皇后问题(数组法.堆栈法) 实验题目:回溯法实验(八皇后问题) 实验目的: 实验要求: 实验内容: (1)问题描述 (2)实验步骤: 数组法: 堆栈法: 算法伪代码: 实验结果: ...

  5. LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...

  6. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  7. 回溯算法-C#语言解决八皇后问题的写法与优化

    结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...

  8. 八皇后问题-回溯法(MATLAB)

    原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...

  9. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...

随机推荐

  1. C++:析构函数的调用时机

    结论:只有当类的某个实例化对象的构造函数执行完毕,而且当该对象退出作用域时,才会执行析构函数. 如果在执行构造函数的过程中抛出了异常,就不会调用析构函数 上测试代码: class Test { pub ...

  2. c++利用初始化列表在类内部和类外部定义构造函数的区别

    case 1:在类外定义构造函数,所有data member都在初始化列表中进行初始化. class SupportClass { public: SupportClass() { cout < ...

  3. 最近很火的namebase羊毛, 手把手教你怎么薅

    闲话少说直接说步骤: 1. 羊毛 https://www.namebase.io/airdrop 要求条件: 1) 要有github账号 2) 2019年2月之前有16+个follower 3) 要有 ...

  4. php 的file 缓存

    PDO方式连接数据库类 <?php /** * @author 黄功延 * createTime 2018/5/28 0028 09:44 */ class Db { //私有化数据库连接数据, ...

  5. pikachu-不安全的文件下载和上传

    一.文件下载漏洞 1.1 概述     很多网站都会提供文件下载的功能,即用户可以通过点击下载链接,下载到链接所对应的文件.但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获 ...

  6. Android Studio 学习笔记(四):Adapter和RecyclerView说明

    在现版本中,滚动控件有多种,而相比于ListView,GridView,RecyclerView的用途更广,因此将前两者作为Adapter适配器的引入,再对RecyclerView进行简单讲解. MV ...

  7. Powershell无文件挖矿查杀方法

    病毒现象 服务器出现卡顿.CPU飙升 和其他主机的445端口,建立起大量的连接 存在大量Powershell进程 病毒处置 封堵445端口; 或打永恒之蓝漏洞补丁(https://wukungt.gi ...

  8. (转)elasticsearch collapse 折叠字段应用

    转自:https://elasticsearch.cn/article/132 在 Elasticsearch 5.x 有一个字段折叠(Field Collapsing,#22337)的功能非常有意思 ...

  9. nCompass-产品配置基础

    nCompass-产品配置基础 设备上架后,浏览器登陆设备的管理IP,输入用户名和密码, 登入进入视图展示页面 1. 添加许可 新设备上架之后,要添加许可方能使用. 步骤: 系统设置 --- 许可-- ...

  10. Vue整合d3.v5.js制作--折线图(line)

    先上效果图(x轴固定为时间轴): 图中出现的悬浮框是鼠标悬停效果 1.环境说明: vue版本:"vue": "^2.5.2" d3版本:"d3&quo ...