当前位置: 首页 > wzjs >正文

科技杭州网站建设保定网站建设公司哪家好

科技杭州网站建设,保定网站建设公司哪家好,厦门建设局,河南商城网站建设审题: 本题需要我们找出n*n的棋盘中,满足题目中所有位置规则的排列的总数,以及前三个排列方式的具体位置 时间复杂度分析:数据量小于25,可以允许2^n的算法 思路: 方法一:dfs暴力搜索 由于每行只…

审题:

本题需要我们找出n*n的棋盘中,满足题目中所有位置规则的排列的总数,以及前三个排列方式的具体位置

时间复杂度分析:数据量小于25,可以允许2^n的算法

思路:

方法一:dfs暴力搜索

由于每行只能有一个棋子,所以我们可以一行一行的进行棋子排放,排放的时候注意当前位置是否满足列,主对角线,副对角线的规则。

综上,进入更深的搜索只需要知道该棋子是在哪一行插入即可

判断列是否可以插入:用bool类型的col数组来判断,初始化为false,表示该索引的列没被插入

判断主/副对角线是否可以插入:

我们需要对棋盘的对角线满足的函数关系进行判断

首先我们先给棋盘建立二维平面坐标系,行为x,列为y。不过这里直接判断函数有点难看,所以我们将坐标系进行翻转,从而得到右边的图

这里是主对角线,我们发现x-y得到的值都是一个整数,我们可以考虑用这个整数作为索引来访问bool数组,若bool数组为false则表示主对角线没有棋子,允许排列。

注意:这里的值可能为负数,所以我们可以加一个偏移量来充当索引

这是副对角线,同理可得,我们使用x+y作为索引记录副对角线是否有棋子插入,由于这里的x+y不可能等于负数,所以不用加偏移量

解题:

(1)变量创建

这里的path是用来记录排列方式的。

主对角线的线数是2n+1,副对角线数是n,不过为了统一,我们都用2*N来当他们的容量。

!!!:由于我们使用的是时间复杂度极高的dfs所以这里要尽量减少使用vector,而是使用普通数组代替vector。因为vector有很多边界检查等额外开销,但是普通数组有很多编译器都对它做了优化。

(2)主函数

(3)dfs

首先我们写出结束语句:

当每一行都插入了数据时,我们将count++,表示排列方式又多了一种,然后根据counts的值判断是否为前三个解,若是则输出path的数据

然后是排列逻辑:

先判断行,列,主副对角线是否有棋子存在,若都没有则进行bool数组状态更新,以及path的插入,然后进入dfs搜索下一行

回溯时:将状态返回,删除path的该层数据

P1219 [USACO1.5] 八皇后 Checker Challenge - 洛谷

http://www.dtcms.com/wzjs/356130.html

相关文章:

  • 影盟自助网站建设今天高清视频免费播放
  • 网站开发哪种框架网络营销环境分析主要包括
  • 做网站 源码线上营销推广方案有哪些
  • 大二dw网页设计作业成品做网站seo怎么赚钱
  • 做飞机票预订网站淘宝seo排名优化软件
  • 营销网站占用多少m空间google网站推广
  • 外贸公司怎么做网站如何免费搭建自己的网站
  • 网站被k是什么意思技能培训机构排名前十
  • 如何在网站做qq群链接优化关键词可以选择哪个工具
  • 做设计网上揽活哪个网站最好软文代写自助发稿平台
  • 自己做网站推广试玩外贸网站推广软件
  • 慈善总会网站建设方案百度推广网站平台
  • 户外运动网站程序win10优化大师好用吗
  • 建设银行流水网站西安seo推广
  • 微信公众平台注册小程序要钱吗seo在线排名优化
  • 嵌入式软件开发岗位职责兰州seo优化入门
  • 武冈市住房和城乡建设局网站深圳百度推广公司
  • seo 网站树搜索引擎优化seo怎么做
  • 营销网站开发安徽百度推广怎么做
  • 菜鸟怎样做自己的网站网络营销方法和手段
  • 督查营商环境建设网站2022黄页全国各行业
  • 深圳外贸网站怎么建长沙seo公司排名
  • html5怎么做二手网站关键词搜索趋势
  • 做企业网站要哪些人员网络营销师
  • 衣服销售网站建设规划书范文企业网站制作教程
  • 成都学生网站制作2024年3月新冠肺炎
  • 旅游网站课程设计北京seo做排名
  • 只有虚拟主机可以做网站吗前端性能优化
  • 彩票网站APP建设珠海百度关键词优化
  • 郑州web网站建设公司国内免费顶级域名注册