The goal of  Queens Problem is to put eight queens on a chess-board such that none of them threatens any of others. A queen threatens the squares in the same row, in the same column, or on the same diagonals as shown in the following figure.
For a given chess board where kk queens are already placed, find the solution of the  queens problem.
Input
In the first line, an integer kk is given. In the following kk lines, each square where a queen is already placed is given by two integers rr and cc. rr and cc respectively denotes the row number and the column number. The row/column numbers start with . Output
Print a ×× chess board by strings where a square with a queen is represented by 'Q' and an empty square is represented by '.'. Constraints
There is exactly one solution
Sample Input 3
Sample Output
......Q.
Q.......
..Q.....
.......Q
.....Q..
...Q....
.Q......
....Q...

题意:

  给出n,代表给出n个确定的棋子数坐标,输出任意一组满足条件的八皇后即可。

不能直接根据斜率进行判断

不知道为什么???

int judge(int x)
{
for(int i=; i<x; i++) //判断之前和走过的行是否有重复
{
int dd1=abs(i-x);
int dd2=abs(a[i]-a[x]);
if(dd1==dd2)
{
return ;
}
}
return ;
//对角线出现过即k=-1或1
//即斜率的绝对值=1
//即两者的横纵坐标对应相减后绝对值相等
}

dfs不知道怎么解释,详细解释看代码上的注释吧。

AC代码:

 #include<stdio.h>
#include<string.h>
#include<iostream>
#include<cmath>
using namespace std; int a[];//记录第几行第几列下了棋
int aa[];//标记行
char s[][];//存图,记录输出
int b[],c[],d[];//标记列、斜率>0的对角线、斜率<0的对角线
//对角线需要开的大一点
int flag; //int judge(int x)//传入行
//{
// for(int i=0; i<x; i++) //判断之前和走过的行是否有重复
// {
// int dd1=abs(i-x);
// int dd2=abs(a[i]-a[x]);
// if(dd1==dd2)
// return 1;
// }
// return 0;
// //对角线出现过即k=-1或1
// //即斜率的绝对值=1
// //即两者的横纵坐标对应相减后绝对值相等
//}
//不知道为什么对角线这样判断会WA void dfs(int x)//传入行
{
if(flag==)
return ;
if(x>)
{
flag=;//因为只需要输出一组结果
for(int i=; i<; i++)
printf("%s\n",s[i]);
return ;
} if(aa[x])//如果该行标记过
dfs(x+);//则往下一行进行搜索
else
{
//如果该行未被标记过,则在该行进行下棋
for(int j=; j<; j++) //决定下在哪一列
{
//a[x]=j;//下上去
//if(b[j]==0&&(judge(x)==0)) //如果该列没有标记且两条对角线没有标记过
if(b[j]==&&c[x+j]==&&d[x-j+]==)
{
c[x+j]=;
d[x-j+]=;
b[j]=;
s[x][j]='Q';
dfs(x+);
s[x][j]='.';
b[j]=;
c[x+j]=;
d[x-j+]=;
}
}
}
return ;
} int main()
{
std::ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int t;
while(cin>>t)
{
memset(a,,sizeof(a));
memset(aa,,sizeof(aa));
memset(b,,sizeof(b));
memset(c,,sizeof(c));
memset(d,,sizeof(d));
flag=;
for(int i=; i<; i++)
{
for(int j=; j<; j++)
s[i][j]='.';
}
int x,y;
for(int i=; i<t; i++)
{
cin>>x>>y;
c[x+y]=;
d[x-y+]=;//标记对角线
aa[x]=;//标记行
a[x]=y;//该点确定下棋了
b[y]=;//标记列
s[x][y]='Q';//确定改点需要输出
}
dfs();
}
return ;
}

Aizu - ALDS1_13_A-8 Queens Problem-八皇后的路径输出的更多相关文章

  1. Python----递归------Eight Queens 八皇后问题

    递归思想是算法编程中的重要思想. 作为初学者,对递归编程表示很蒙逼,每次遇到需要递归的问题,心里就有一万头草泥马飞过~~~~~~(此处略去一万头草泥马) 在B站看数据结构与算法的视频时,视频中给了两个 ...

  2. 54. 八皇后问题[eight queens puzzle]

    [本文链接] http://www.cnblogs.com/hellogiser/p/eight-queens-puzzle.html [题目] 在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即 ...

  3. C语言解决八皇后问题

    #include <stdio.h> #include <stdlib.h> /* this code is used to cope with the problem of ...

  4. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  5. Python解决八皇后问题

    最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...

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

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

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

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

  8. 八皇后问题详细分析与解答(递归法解答,c#语言描述)

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或 ...

  9. 【Python】生成器、回溯和八皇后问题

    八皇后问题: 把N个皇后,放在N*N的棋盘上面,从第一行往下放,每个皇后占一行,同时,每个皇后不能处在同一列,对角线上,有多少种放置方法. 思路: 典型的回溯问题: 1.当要放置最后一个皇后时候,默认 ...

随机推荐

  1. Mac上安装Android SDK

    今天开始学习IOS,所以先买了个设备先,但是开始使用了苹果本,还是需要继续开发Android,因为那是我现在吃饭的东西,所以就需要在Mac上配置Android SDK,原以为安装SDK很简单,和Win ...

  2. Codeforces Round #568 (Div. 2) G1. Playlist for Polycarp (easy version) (状压dp)

    题目:http://codeforces.com/contest/1185/problem/G1 题意:给你n给选项,每个选项有个类型和价值,让你选择一个序列,价值和为m,要求连续的不能有两个相同的类 ...

  3. I/O复用 poll简介

    1.基本概念 poll起源于SVR3,开始时局限于流设备,在SVR4时取消了此限制,允许poll工作在任何描述符上,但涉及到流设备时,它还提供了附加信息. poll的机制与select类似,与sele ...

  4. 12、testng.xml指定运行测试包、测试类、测试方法

    目录如下: TestFixture.java 代码如下: package com.testng.cn; import org.testng.annotations.*; public class Te ...

  5. 注解@Override

    Android的开发者对@Override肯定是非常熟悉,不管是自己的代码中还是书上都会出现,但是他是什么意思呢?如下: @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: ...

  6. jmeter 读写excel插件编写教程系列(1) -开篇

    不知道为什么,jmeter 竟然不提供 读写excel 的Sampler! 但是在我们自动化接口测试过程中,参数化.保存测试数据,用excel 是比较好的解决方案! 接下来一段儿时间,大虫会抽出一些时 ...

  7. centOs7 java启动jar 并部署到nginx

    简单启动命令 启动命令: nohup java –jar 项目名 & 注意1.加&表示一直后台运行,不加表示临时运行,关闭窗口项目即停止运行2.nohup:即项目在运行前新建一个noh ...

  8. mysql-python不支持python3

    使用Mysqlclient pip3 install Mysqlclient

  9. kibana 7.* 设置中文 汉化

    原文:kibana 7.* 设置中文 汉化 个人博客:forever121.cn kibana 一直是 日志分析 中得力的助手 由于 kibana5.* 6.* 官方并没有支持中文,需要另外下载补丁包 ...

  10. 微信小程序开发显示城市天气

    本案例实现动态显示城市天气的功能,案例效果如下: 首先分析制作的思路: 1.在app.json文件的pages数组里加上main文件夹和template(模板)文件夹的路径. 2.在main.js文件 ...