ARTS 第8周

栏目: 编程工具 · 发布时间: 4年前

内容简介:[TOC]八皇后问题在 8 X 8 的网格中,放入八个皇后(棋子),满足的条件是,任意两个皇后(棋子)都不能处于同一行、同一列或同一斜线上,问有多少种摆放方式?

ARTS 第8周分享

[TOC]

Algorithm

八皇后问题

在 8 X 8 的网格中,放入八个皇后(棋子),满足的条件是,任意两个皇后(棋子)都不能处于同一行、同一列或同一斜线上,问有多少种摆放方式?

[思路]

  1. 假设坐标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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

嵌入式Linux应用开发完全手册

嵌入式Linux应用开发完全手册

韦东山 主编 / 人民邮电出版社 / 2008-8 / 69.00元

本书全部实例代码及相关工具。 基于ARM 9+Linux 206平台,从基础讲起,引导读者快速入门,实例丰富,可直接应用于工程实践。 本书全面介绍了嵌入式Linux系统开发过程中,从底层系统支持到上层GUI应用的方方面面,内容涵盖Linux操作系统的安装及相关工具的使用、配置,嵌入式编程所需要的基础知识(交叉编译工具的选项设置、Makefile语法、ARM汇编指令等),硬件部件的使用及......一起来看看 《嵌入式Linux应用开发完全手册》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具