ARTS 第8周

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

内容简介:[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

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

查看所有标签

猜你喜欢:

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

Practical JavaScript, DOM Scripting and Ajax Projects

Practical JavaScript, DOM Scripting and Ajax Projects

Frank Zammetti / Apress / April 16, 2007 / $44.99

http://www.amazon.com/exec/obidos/tg/detail/-/1590598164/ Book Description Practical JavaScript, DOM, and Ajax Projects is ideal for web developers already experienced in JavaScript who want to ......一起来看看 《Practical JavaScript, DOM Scripting and Ajax Projects》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具