文章代码选自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. bootstrap 表单类

    bootstrap 表单类 表单美化 用法: 向父元素 <form role="form"></form>     添加 role="form&q ...

  2. TTStand 基础知识[8] Build-In StepTypes(3)

    Build-In Step Types的最后一篇,前面两篇的连接如下: TestStand 基础知识[7] Build-In StepTypes(2) TestStand 基础知识[6] Build- ...

  3. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第六节:反爬策略研究

    之前的章节也略有提及反爬策略,本节,我们就来系统的对反爬.反反爬的种种,做一个了结. 从防盗链说起: 自从论坛兴起的时候,网上就有很多人会在论坛里发布一些很棒的文章,与当下流行的“点赞”“分享”一样, ...

  4. python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)

    # python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...

  5. NPM install -save 和 -save-dev 区别

    最近在写Node程序的时候,突然对 npm install 的-save和-save-dev 这两个参数的使用比较混乱.其实博主在这之前对这两个参数的理解也是模糊的,各种查资料和实践后对它们之间的异同 ...

  6. 【HDU - 1069】 Monkey and Banana (基础dp)

    Monkey and Banana 直接写中文了 Problem Statement 一组研究人员正在设计一项实验,以测试猴子的智商.他们将挂香蕉在建筑物的屋顶,同时,提供一些砖块给这些猴子.如果猴子 ...

  7. C语言基础五 数组的应用

    .根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩 int scoure[10];//存储10个数据的数组 int i; int sum;//总成绩 int max,min, ...

  8. 【HDU - 1176 】免费馅饼 (逆dp)

    免费馅饼  Descriptions: 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁 ...

  9. C#设计模式学习笔记:(8)装饰模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7723225.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第三个模式--装 ...

  10. 安装Linux系统时LSI RAID卡的驱动挂载

    转载原文地址:https://www.jianshu.com/p/64415712401e 当使用较新的SAS卡来安装Linux系统时,经常会遇到在系统安装界面读不到RAID的情况,这时就需要考虑Li ...