八皇后-go實現

八皇后遊戲規則說明:

    在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。(百度百科)

延申到n皇后,規則已知,算法的空間複雜度爲O(n^2), 空間複雜度爲O(n),

package main

import "fmt"

//判斷該位置是否滿足八皇后規則
func eJudge(e []int, i int) bool {
    for z := 1; z < i; z++ {
        if e[z] == e[i] || z-e[z] == i-e[i] || e[z]+z == e[i]+i {
            return false
        }
    }
    return true
}

//打印八皇后的位置
func ePrint(e []int) {
    fmt.Println("=================")
    for _, j := range e {
        for z := 0; z < len(e); z++ {
            if z == j {
                fmt.Printf("1 ");
            } else {
                fmt.Printf("0 ");
            }
        }
        fmt.Println("")
    }
}

//遊戲go
func eight(e []int, i int, cnt *int) {
    if i == len(e) {
        *cnt += 1
        return
    }
    for j := 1; j < len(e); j++ {
        e[i] = j
        if eJudge(e, i) {
            eight(e, i+1, cnt)
        }
        e[i] = 0
    }
}

//輸入參數
func eightProcess(num int) int {
    cnt := new(int)
    *cnt = 0
    e := make([]int, num+1)
    eight(e, 1, cnt)
    return *cnt
}

//demo 8x8
func main() {
    result := eightProcess(8)
    fmt.Println(result)
}

 

發佈了34 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章