N皇后问题(Go版本)


当前第2页 返回上一页

下面是代码:

import "fmt"

var Res [][]string
var N int


func Recursion(mid []string, i,j int){
    // mid代表存储中间结果的string切片,i代表棋盘的第几行,j代表第几列已经有Q了

    // 对插入的这个位置左上、上、右上进行判断,是否存在皇后
    // 先判断上
    for idx:=i-1;idx>=0;idx--{
        if mid[idx][j] == 'Q'{
            return
        }
    }

    // 再判断左上
    for x,y:=i-1,j-1;x>=0&&y>=0;x,y=x-1,y-1{
        if mid[x][y] == 'Q'{
            return
        }
    }

    // 再判断右上
    for x,y:=i-1,j+1;x>=0&&y<N;x,y=x-1,y+1{
        if mid[x][y] == 'Q'{
            return
        }
    }

    if i==N-1{
        // 遍历过了最后一行,直接结束
        Res = append(Res, mid)
        return
    }


    subMid := make([]byte, 0)
    for idx := 0; idx < N; idx++ {
        subMid = append(subMid, '.')
    }

    for idx:=0;idx<N;idx++{
        subMid[idx] = 'Q'
        length := len(mid)
        Recursion(append(mid[:length:length], string(subMid)), i+1, idx)
        subMid[idx] = '.'
    }
}



func solveNQueens(n int) [][]string {
    N = n
    Res = make([][]string, 0)

    Recursion(make([]string, 0), -1,-1)

    return Res
}



func main() {
    res := solveNQueens(4)
    fmt.Println(res)
}

本文来自:Segmentfault

感谢作者:SyntaxError

查看原文:N皇后问题(Go版本)

返回前面的内容

相关阅读 >>

Golang一行代码把array/slice转成逗号分隔的字符串

聊聊Gost的generictaskpool

手撸Golang Go与微服务 chatserver之1

聊聊storagetapper的pipe

Golang 自然语言处理工具(Gohanlp)

数组指针做函数参数

聊聊dubbo-Go-proxy的client

Golang 适合做web开发吗

手撸Golang 基本数据结构与算法 图的最短路径  狄克斯特拉算法

Go - time.rfc3339 时间格式化

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...