内容简介:[TOC]八皇后问题在 8 X 8 的网格中,放入八个皇后(棋子),满足的条件是,任意两个皇后(棋子)都不能处于同一行、同一列或同一斜线上,问有多少种摆放方式?
ARTS 第8周分享
[TOC]
Algorithm
八皇后问题
在 8 X 8 的网格中,放入八个皇后(棋子),满足的条件是,任意两个皇后(棋子)都不能处于同一行、同一列或同一斜线上,问有多少种摆放方式?
[思路]
- 假设坐标0,0就是第一个棋子的位置,然后在第二行第1列放第二个棋子判断是否满足设定的条件,如果不合适列号加1直到找到合适的位置。继续为下一个棋子找合适的位置
[参考代码]
func sortArrayByParityII(A []int) []int { odds := make([]int, 0) evens := makepackage main import ( "fmt" ) func main() { cal8queens(0) } var result = make([]int, 9) var n = 0 func cal8queens(row int) { if row == 8 { printQuees(result) n++ return } for col := 0; col < 8; col++ { if isOkCol(row, col) { result[row] = col cal8queens(row+1) } } } func isOkCol(row, col int) bool { leftCol := col - 1 rightCol := col + 1 for i := row - 1; i >= 0; i-- { if result[i] == col { return false } if leftCol >= 0 { if result[i] == leftCol { return false } } if leftCol < 8 { if result[i] == rightCol { return false } } leftCol-- rightCol-- } return true } func printQuees(result []int) { for i:=0; i<8; i++ { for j:=0; j<8; j++ { if result[i] == j { fmt.Print( "Q" + " ") } else { fmt.Print( "*" + " ") } } fmt.Println() } fmt.Println("\n------------------\n") } ([]int, 0) // 遍历整个数组用连个容器,分别存储位置不对的奇数和偶数 for i, v := range A { if i%2 == 0 && v%2 != 0 { evens = append(evens, i) } else if i%2 != 0 && v%2 == 0 { odds = append(odds, i) } // 分别从两个容器中取出一个数据,进行位置互换 if len(odds) > 0 && len(evens) > 0 { A[evens[0]], A[odds[0]] = A[odds[0]], A[evens[0]] evens = evens[1:] odds = odds[1:] } } return A }
Review
Part 28: Polymorphism - OOP in Go: https://golangbot.com/polymorphism/
- 关于golang如何通过interface实现多态性
Tips
Git 基础 - 打标签:
-
显示已有的标签:
-
- 显示全部:git tag
- 显示指定标签:git tag -l 'xxx.*' (正则匹配)
-
新建标签:
-
- 新建轻量级标签(lightweight):git tag tagName
- 新建含附注的标签(annotated):git tag -a tagName -m "附注"
-
删除标签:
-
- git tag -d tagName
-
查看标签具体信息:
-
- git show tagName
-
签署标签(signed):
-
- git tag -s tagName -m "附注"
-
验证标签(verify):
-
- git tag -v tagName
-
后期追加标签:
-
- 先找到指定的版本号
- git tag tagName 版本号/ git tag -a tagName 版本号
-
上传标签
-
- 单个标签:git push origin tagName
- 所有标签:git push origin --tags/--follow-tags
Share
学习数据结构的框架思维: https://mp.weixin.qq.com/s/KVRAPMnVLoyy6p0n3SbMJA
-
数据结构的构成:由底层基础构造复杂上层结构
-
- 最基础的结构:数组和链表
- 复合结构:散列表, 栈, 队列,树, 图等
-
数据结构的操作(算法):遍历加访问
-
- 线性: for/while 为代表
- 非线性:递归为代表
-
数据结构和算法:
-
对于初学者:学会从框架上看问题,而不纠结于细节的实现
Golang 安装第三方包: https://www.jianshu.com/p/97738b026521
本周阅读
第三周:1, 2, 3, 4, 7 最详细的IDEA中使用Debug教程: https://mp.weixin.qq.com/s/kWepBAGy5Hb15GfrsEiSHw 查看变量: 通过点击加号,查看已经存在的变量 Evaluate Expression 计算表达式 可以查看某个变量的值 也可以用于计算某个表达式的结果 可以计算方法返回的结果(不过golang中尝试了,却无法计算) 断点设置条件:即在断点位置,它的条件成立时才会暂停,否则就跳过 条件可以是一个变量的结果,或者是一个判断语句(eg: a == b) 设置方法:在断点上右击 查看所有断点:View Breakpoints 多线程调试:线程级别的调试 必须先开启默认线程 数据库的设计(E-R图,数据库模型图,三大范式): https://blog.csdn.net/Firewall5788/article/details/78112516 Part 36: Writing Files: https://golangbot.com/write-files/ 微信大佬总结的算法学习经验: https://mp.weixin.qq.com/s/fECqsr3T4WKNcx7s-2ozuA - 数据库ER图基础概念整理:https://zhuanlan.zhihu.com/p/29029129 第四周(动态规划周):1, 2, 3, 5, 6, 7 什么是策略模式?https://mp.weixin.qq.com/s/50HE4CzENZPniFWZjMEFtw 浅谈什么是动态规划以及相关的「股票」算法题:https://mp.weixin.qq.com/s/p91e-EuSuVK3bfOc7uJplg Dynamic Programming--从菜鸟到老鸟: https://blog.csdn.net/u013309870/article/details/75193592 Go sort包使用与源码剖析: https://mp.weixin.qq.com/s/EkQm4RkZpl3dJpquBqHveg Git 基础 - 打标签: https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE - Go 1.9 新特性 Type Alias详解: https://www.flysnow.org/2017/08/26/go-1-9-type-alias.html Part 12: Variadic Functions: https://golangbot.com/variadic-functions/ 如何提升电脑性能(win)?https://mp.weixin.qq.com/s/LFxfZXonQfH5JXvxI7blww 开启高性能模式 学习数据结构的框架思维: https://mp.weixin.qq.com/s/KVRAPMnVLoyy6p0n3SbMJA Part 28: Polymorphism - OOP in Go: https://golangbot.com/polymorphism/ 数据结构与算法之递归系列:https://mp.weixin.qq.com/s/2gL7s8T6vjYQwwz_4UDy4g
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。