去重N皇后
题目:将上下对称、左右对称棋局、主副对角线对称棋局和旋转后重复视为重复,则要求输出去重后的N皇后问题的棋盘布局
这道题是一道作业题,我都惊到了,一向弱智的作业题中竟然冒出一道这样的题,这题最起码橙黄之间的难度,标个黄应该也没什么问题。我竟然写了一百多行代码,在不影响可读性的情况下去掉无用行后仍有98行(如果舍弃结构化编程思想全部写入主函数内的话还能再减少几十行,但那是很不好的编程习惯,所以没那么做)。可见这道作业题还是蛮麻烦的,总体来说就是一个模拟方阵各类操作+常规N皇后求解的问题
Code
#include <iostream>
#include <vector>
using namespace std;
int N,ans;
vector<int> S,A[20];
int ud(const vector<int>& A,const vector<int>& B)
{
for(int i=1;i<=N;i++)
if(A[i]!=B[N+1-i])//i,j->n+1-i,j
return 0;
return 1;
}
int lr(const vector<int>& A,const vector<int>& B)
{
for(int i=1;i<=N;i++)
if(A[i]+B[i]!=N+1)//i,j->i,n+1-j
return 0;
return 1;
}
int lk(const vector<int>& A,const vector<int>& B)
{
for(int i=1;i<=N;i++)
if(i+B[N+1-A[i]]!=N+1) //i,j->n+1-j,n+1-i
return 0;
return 1;
}
int rk(const vector<int>& A,const vector<int>& B)
{
for(int i=1;i<=N;i++) //i,j->j,o
if(B[A[i]]!=i)
return 0;
return 1;
}
const vector<int> spin(const vector<int> A)
{
vector<int>B;//i,j->j,n+1-i
for(int i=0;i<=N;i++)
B.push_back(0);
for(int i=1;i<=N;i++)
B[A[i]]=N+1-i;
return B;
}
int r1(const vector<int>& A,const vector<int>& B)
{
if(spin(A)==B)return 1;
return 0;
}
int r2(const vector<int>& A,const vector<int>& B)
{
if(spin(spin(A))==B)return 1;
return 0;
}
int r3(const vector<int>& A,const vector<int>& B)
{
if(spin(spin(spin(A)))==B)return 1;
return 0;
}
void f(int n)
{
if(n==N+1)
{
for(int i=1;i<=ans;i++)
if(ud(A[i],S)||lr(A[i],S)||lk(A[i],S)||rk(A[i],S)||r1(A[i],S)||r2(A[i],S)||r3(A[i],S))
return;
A[++ans]=S;
}
for(int i=1;i<=N;i++)
{
int flag=1;
for(int k=1;k<n;k++)
if(S[k]==i||S[k]-k==i-n||S[k]+k==i+n)
{
flag=0;
break;
}
if(flag==1)
{
S.push_back(i);
f(n+1);
S.pop_back();
}
}
}
signed main()
{
cin>>N;
S.push_back(0);
f(1);
for(int i=1;i<=ans;i++)
{
cout<<"No"<<i<<':';
for(int j=1;j<=N;j++)
cout<<A[i][j]<<' ';
cout<<endl;
}
return 0;
}
去重N皇后的更多相关文章
- PAT (Advanced Level) 1128~1131:1128N皇后 1129 模拟推荐系统(set<Node>优化) 1130 中缀表达式
1128 N Queens Puzzle(20 分) 题意:N皇后问题.按列依次给定N个皇后的行号,问N个皇后是否能同时不存在行冲突.列冲突和主副对角线冲突. 分析: 1.根据题意一定不存在列冲突,所 ...
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- 递归实现n(经典的8皇后问题)皇后的问题
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...
- 数组去重 JS
我说的数组去重是这样的: var arr = ['f', 'a', 'b', 'd', 'e', 'g'] ; var str='f'; 去除arr中的str 最简单的是遍历arr与str做比较, ...
- [Algorithm] 使用SimHash进行海量文本去重
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...
- JS去重及字符串奇数位小写转大写
面试中经常会考到数组的去重.作为一名合格的前端开发者,不知道几种去重方法是在不应该.废话不多说直接开撸-- 一.indexOf()方法 实现思路:使用indexOf()方法来判断新数组中是否有这个值, ...
- js数组去重
这就是数组去重了...var str=['hello','node','element','node','hello','blue','red'];var str1=[]; function firs ...
- 八皇后算法的另一种实现(c#版本)
八皇后: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于 ...
- [Hadoop]-从数据去重认识MapReduce
这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...
- 1.uniq去重命令讲解
uniq命令: 常见参数: -c,--count ***** 在每行旁边显示改行重复出现的次数 -d,--repeated 仅显示重复出现的行,2次或2次以上的行,默认的去重包 ...
随机推荐
- vertx的学习总结三
一.event bus是什么 各个verticle的通信 二.point-to-point, request-reply, publish/subscribe 通过 the event bus 例题一 ...
- [CF403E]Two Rooted Trees
Two Rooted Trees 题面翻译 题目描述 你有两棵有根树,每棵树都有 \(n\) 个结点.不妨将这两棵树上的点都用 \(1\) 到 \(n\) 之间的整数编号.每棵树的根结点都是 \(1\ ...
- Semantic Kernel 正式发布 v1.0.1 版本
微软在2023年12月19日在博客上(Say hello to Semantic Kernel V1.0.1)发布了Semantic kernel的.NET 正式1.0.1版本.新版本提供了新的文档, ...
- Spingboot整合Dubbo+zookeeper
前言: 2023-12-26 19:38:05 最近学习分布式技术:Dubbo+zookeeper,准备写一个demo用springboot整合dubbo和zookeeper.但是看了网上一些教程都是 ...
- 笔记本安装linux
下载 桌面版 Ubuntu 镜像 服务器版 Ubuntu 镜像 使用 Balena Etcher 制作系统安装盘 (1)官方网站下载: 点我下载 (2)下载完毕软件之后,打开软件,选择我们下载好的系统 ...
- BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题
BeanCurrentlyInCreationException解决当前容器创建异常.循环依赖问题 一.什么是循环依赖呢? 类A依赖类B,类B也依赖类A,这种情况就会出现循环依赖. Bean A → ...
- 从VMWare安装到Nginx配置
1.安装VMWare Workstation 16 player,Mac也可使用Parallels Desktop,自己有虚拟主机的跳过: 2.在虚拟机中,安装Centos7操作系统,使用Minima ...
- 第五部分_Shell脚本条件判断语法结构
条件判断语法结构 思考:何为真(true)?何为假(false)? 1. 条件判断语法格式 格式1: test条件表达式 格式2: [ 条件表达式 ] 格式3: [[ 条件表达式 ]] (支持正则~) ...
- 昇腾实战丨DVPP媒体数据处理图片解码问题案例
摘要:本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法. 本文分享自华为云社区<DVPP媒体数据处理图片解码问题案例>,作者:昇腾CANN . DVPP(Digi ...
- 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人
摘要:使用华为云EI智能机器人技术,从0到1开发一款开源知识问答机器人. 前言 最近有幸参与了开源社开源问答机器人的知识库编写,碰巧看到华为云也有类似的智能机器人,抱着试一试的心态,我开始了EI智能机 ...