佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Go語(yǔ)言實(shí)現(xiàn)的最簡(jiǎn)單數(shù)獨(dú)解法

Go語(yǔ)言實(shí)現(xiàn)的最簡(jiǎn)單數(shù)獨(dú)解法

熱門標(biāo)簽:百度競(jìng)價(jià)排名 網(wǎng)站排名優(yōu)化 鐵路電話系統(tǒng) 服務(wù)外包 地方門戶網(wǎng)站 呼叫中心市場(chǎng)需求 Linux服務(wù)器 AI電銷

soduku.go

復(fù)制代碼 代碼如下:

package main
import (
    "fmt"
)
type node []int
var sudokuMay [9][9]node
var Sudoku = [9][9]int{
    {0, 0, 0, 0, 0, 0, 8, 0, 0},
    {0, 8, 2, 4, 0, 0, 0, 0, 0},
    {1, 9, 0, 0, 6, 3, 0, 0, 0},
    {0, 5, 0, 0, 8, 0, 7, 0, 0},
    {6, 7, 8, 2, 0, 9, 1, 4, 3},
    {0, 0, 3, 0, 4, 0, 0, 8, 0},
    {0, 0, 0, 6, 2, 0, 0, 9, 4},
    {0, 0, 0, 0, 0, 5, 6, 1, 0},
    {0, 0, 0, 6, 0, 0, 0, 0, 0}}
func main() {
    n := inited(Sudoku)
    SudokuSure, _ := sure(sudokuMay)
    for n > 0 {
        n = Subinit(SudokuSure)
        // Output(sudokuMay)
        // fmt.Println(n)
        SudokuSure, _ = sure(sudokuMay)
    }
    Output(sudokuMay)
    fmt.Println(isEnable(sudokuMay))
    // test()
}
func isEnable(tn [9][9]node) bool {
    for i := 0; i 9; i++ {
        for j := 0; j 9; j++ {
            if len(tn[i][j]) == 0 {
                return false
            }
        }
    }
    return true
}
func sure(may [9][9]node) (sure [9][9]int, n int) {
    n = 0
    for i := 0; i 9; i++ {
        for j := 0; j 9; j++ {
            if len(may[i][j]) == 1 {
                sure[i][j] = may[i][j][0]
                n++
            } else {
                sure[i][j] = 0
            }
        }
    }
    return
}
func test() {
    i, j := 1, 3
    fmt.Println(Sudoku[i][j])
    for k := ((i / 3) * 3); k ((i/3)*3)+3; k++ {
        for l := ((j / 3) * 3); l ((j/3)*3)+3; l++ {
            fmt.Print(Sudoku[k][l])
        }
        fmt.Println(" ")
    }
}
func inited(Sud [9][9]int) (changeCount int) {
    tmp := 0
    changeCount = 0
    for i := 0; i 9; i++ {
        for j := 0; j 9; j++ {
            if Sud[i][j] != 0 {
                sudokuMay[i][j] = append(sudokuMay[i][j], Sud[i][j])
            } else {
                for k := 0; k 9; k++ {
                    sudokuMay[i][j] = append(sudokuMay[i][j], k+1)
                }
                sudokuMay[i][j], tmp = excludeMay(i, j, sudokuMay[i][j], Sud)
                changeCount += tmp
            }
        }
    }
    return
}
func Subinit(Sud [9][9]int) (changeCount int) {
    tmp := 0
    changeCount = 0
    for i := 0; i 9; i++ {
        for j := 0; j 9; j++ {
            if Sud[i][j] != 0 {
                sudokuMay[i][j][0] = Sud[i][j]
            } else {
                sudokuMay[i][j], tmp = excludeMay(i, j, sudokuMay[i][j], Sud)
                changeCount += tmp
            }
        }
    }
    return
}
func excludeMay(ti, tj int, t node, S [9][9]int) (rmay node, changeCount int) {
    changeCount = 0
    var tmpChangeCount int
    for i := 0; i 9; i++ {
        if S[i][tj] != 0 {
            t, tmpChangeCount = exclude(t, S[i][tj])
            changeCount += tmpChangeCount
        }
        if S[ti][i] != 0 {
            t, tmpChangeCount = exclude(t, S[ti][i])
            changeCount += tmpChangeCount
        }
    }
    for k := ((ti / 3) * 3); k ((ti/3)*3)+3; k++ {
        for l := ((tj / 3) * 3); l ((tj/3)*3)+3; l++ {
            if S[k][l] != 0 {
                t, tmpChangeCount = exclude(t, S[k][l])
                changeCount += tmpChangeCount
            }
        }
    }
    rmay = t
    return
}
func excludeFirstOne(smay node, n int) (rmay node, changeCount int) {
    changeCount = 0
    rmay = smay
    for i := 0; i len(smay); i++ {
        if smay[i] == n {
            changeCount++
            rmay = append(smay[:i], smay[i+1:]...)
            return
        }
        if i == len(smay)-1 {
            return
        }
    }
    return
}
func exclude(smay node, n int) (tmp node, changeCount int) {
    var nc int
    changeCount = 0
    tmp, nc = excludeFirstOne(smay, n)
    for nc > 0 {
        tmp, nc = excludeFirstOne(tmp, n)
        changeCount++
    }
    return
}
func Output(sudoku [9][9]node) {
    for i := 0; i 9; i++ {
        for j := 0; j 9; j++ {
            fmt.Print(sudokuMay[i][j])
        }
        fmt.Println("")
    }
}

以上就是本文給大家分享的代碼的全部?jī)?nèi)容了,希望大家能夠喜歡。

您可能感興趣的文章:
  • Java實(shí)現(xiàn)解數(shù)獨(dú)的小程序
  • JavaScript遍歷求解數(shù)獨(dú)問(wèn)題的主要思路小結(jié)
  • python實(shí)現(xiàn)數(shù)獨(dú)算法實(shí)例
  • c++遞歸解數(shù)獨(dú)方法示例
  • JQuery開(kāi)發(fā)的數(shù)獨(dú)游戲代碼
  • PHP實(shí)現(xiàn)的方程求解示例分析
  • PHP經(jīng)典算法集錦【經(jīng)典收藏】
  • php編寫的抽獎(jiǎng)程序中獎(jiǎng)概率算法
  • php 大數(shù)據(jù)量及海量數(shù)據(jù)處理算法總結(jié)
  • 適用于抽獎(jiǎng)程序、隨機(jī)廣告的PHP概率算法實(shí)例
  • php中最簡(jiǎn)單的字符串匹配算法
  • php數(shù)字轉(zhuǎn)漢字代碼(算法)
  • PHP實(shí)現(xiàn)的數(shù)獨(dú)求解問(wèn)題示例

標(biāo)簽:崇左 黃山 湖南 蘭州 仙桃 衡水 銅川 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go語(yǔ)言實(shí)現(xiàn)的最簡(jiǎn)單數(shù)獨(dú)解法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    宁海县| 渭源县| 夏河县| 福清市| 花莲市| 梓潼县| 上饶市| 文安县| 林周县| 如皋市| 白河县| 夏邑县| 洛川县| 平阳县| 丽江市| 当涂县| 札达县| 阳高县| 青州市| 北流市| 呈贡县| 常山县| 新沂市| 寿光市| 绍兴市| 东明县| 汾阳市| 商洛市| 瓮安县| 老河口市| 雅江县| 大田县| 布尔津县| 修文县| 云浮市| 天台县| 兴文县| 山丹县| 疏勒县| 虎林市| 龙游县|