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 ...
随机推荐
- ArtiPub:一款开源的一文多发平台
文章来自我的博客:https://blog.ljyngup.com/archives/705.html/ 看到感觉挺有意思的,有空找个空闲的VPS搭建一下. 转自官方Github仓库 ArtiPub ...
- The related functions and attributes for managing attributes - 操作属性的重要属性和函数
特性 property 都是类属性(静态变量),但是特性管理的其实是实例属性的存取, ****** 回顾 -'类方法' classmethod 和 '静态方法' staticmethod 皆可以访问类 ...
- 《自拍教程5》Python自动化测试学习思路
前提:熟悉测试业务及流程 任何Python自动化测试的前提,都是必须先熟悉实际测试业务. 任何脱离实际测试业务的自动化都是噱头且无实际意义! 测试的基本流程基本是: 测试需求分析,测试用例设计与评审, ...
- docker安装db2数据库
查询可安装的db2镜像 # docker search db2 [root@docker-servers ~]# docker search db2 INDEX NAME DESCRIPTION ST ...
- textarea 标签
textarea 标签 -- 代表HTML表单多行输入域 textarea标签是成对出现的,以<textarea>开始,以</textarea>结束 属性: Common -- ...
- 第二篇 Springboot mybatis generate根据数据库表自动生成实体类、Mapper和Mapper.xml
源码链接:https://pan.baidu.com/s/1iP4UguBufHbcIEv4Ux4wDw 提取码:j6z9 目录结构如下:只需增加一个generatorConfig.xml文件和在po ...
- 用msi安装MySQL时MySQL Server组件不能安装,或安装失败
我的环境: MySQL8.0.15, win10 错误描述:在安装MySQL时,如果MySQL Server组件提示不能安装,错误提示是:VS 2015没有安装或安装失败.原因 ...
- 前后端API交互如何保证数据安全性?(转)
前言 前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合.无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用 ...
- 【HDU - 1260 】Tickets (简单dp)
Tickets 搬中文 Descriptions: 现在有n个人要买电影票,如果知道每个人单独买票花费的时间,还有和前一个人一起买花费的时间,问最少花多长时间可以全部买完票. Input 给出 N(1 ...
- 多线程笔记 - Master-Worker
多线程的 Master-Worker 从字面上也是可以理解的. Master 相当于领导, 一个就够了, 如果是多个, 那么听谁的, 是个大问题. Master负责指派任务给 Worker. 然后对每 ...