亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于排除法填充模型的數(shù)獨(dú)求解算法

        2014-07-13 01:25:26
        關(guān)鍵詞:九宮格格子矩陣

        吳 濤

        (西安航空學(xué)院 理學(xué)院,陜西 西安710077)

        引言

        九宮格數(shù)獨(dú),是一種源自18世紀(jì)末的瑞士,后在美國發(fā)展、并在日本得以發(fā)揚(yáng)光大的數(shù)字謎題[1]。數(shù)獨(dú)盤面是個九宮,每一宮又分為九個小格。在這八十一格中給出一定的已知數(shù)字和解題條件,利用邏輯和推理,在其他的空格上填入1-9這九個數(shù)字。使1-9每個數(shù)字在每一行、每一列和每一宮中都只出現(xiàn)一次。這種游戲全面考驗(yàn)做題者的觀察能力和推理能力,雖然玩法簡單,但數(shù)字排列方式卻千變?nèi)f化[2],所以不少教育者認(rèn)為數(shù)獨(dú)是訓(xùn)練頭腦的絕佳方式。但是目前使用的數(shù)獨(dú)解算器[3-5],以試探性的遍歷算法進(jìn)行填充,耗時過長。通過建立排除填充法的數(shù)學(xué)模型,并在此基礎(chǔ)上提出一種新型的填充數(shù)獨(dú)游戲的算法[6],通過Matlab編程[7],在計(jì)算機(jī)上得以實(shí)現(xiàn)。

        1 建立數(shù)學(xué)模型

        1.1 數(shù)獨(dú)游戲簡介

        如圖1所示,數(shù)獨(dú)盤面是九個宮,每一宮又分為九個小格。在這八十一格中給出一定的已知數(shù)字和解題條件,利用邏輯和推理,在其他的空格上填入1-9的數(shù)字。使1-9每個數(shù)字在每一行、每一列和每一宮中都只出現(xiàn)一次。

        圖1 數(shù)獨(dú)

        1.2 排除法填充模型

        1.2.1 行填充模型

        將九宮格數(shù)獨(dú)看做是一個9*9的矩陣,那么就可用aij(1<=i<=9,1<=j<=9)表示數(shù)獨(dú)第i行,第j列格子里的數(shù)字。設(shè)ai1,ai2,…,aim(1<=m<9)是數(shù)獨(dú)中第i行已經(jīng)填充好的m個數(shù)字。

        首先,去掉1-9這九個數(shù)中的ai1,ai2,…aim,剩下的數(shù)ai(m+1),ai(m+2),…,ai9就是要填充在第i行剩下的9-m個空白格子里的數(shù)。假設(shè)aik(m+1<=k<=9)填充在第i行第j(1<=j<=9-m)個空白格子里,如果第i行第j個空白格子所處的列位置以及它所對應(yīng)的宮位置中,任何一個格子里的數(shù)字與aik都不相同,那么稱aik適合填充在第i行第j個空白格子里,否則,稱aik不適合填充在第i行第j個空白格子里。

        行模型是這樣一種填充原則:如果第i行有且僅有一個空白格子適合填aik(m+1<=k<=9),那么aik一定填充在該位置,否則,aik不填充。

        1.2.2 列填充模型

        將九宮格數(shù)獨(dú)看做是一個9*9的矩陣,那么就可用aij(1<=i<=9,1<=j<=9)表示數(shù)獨(dú)第i行,第j列格子里的數(shù)字。設(shè)a1j,a2j,…,amj(1<=m<9)是數(shù)獨(dú)中第j列已經(jīng)填充好的m個數(shù)字。

        首先,去掉1-9這九個數(shù)中的a1j,a2j,…,amj,剩下的數(shù)a(m+1)j,a(m+2)j,…,a9j就是要填充在第j列剩下的9-m個空白格子里的數(shù)。假設(shè)akj(m+1<=k<=9)填充在第j列第n(1<=n<=9-m)個空白格子里,如果第j列第n個空白格子所處的行位置以及它所對應(yīng)的宮位置中,任何一個格子里的數(shù)字與akj(m+1<=k<=9)都不相同,那么稱akj(m+1<=k<=9)適合填充在第j列第n個空白格子里, 否則稱akj不適合填充在第j列第n個空白格子里。

        列模型是這樣一種填充原則:如果第j列有且僅有一個空白格子適合填akj(m+1<=k<=9),那么akj(m+1<=k<=9)一定填充在該位置,否則,akj(m+1<=k<=9)不填充。

        1.2.3 宮填充模型

        數(shù)獨(dú)盤面有九個宮,每一宮又分為九個小格。任何一個宮所處的位置可用第i(1<=i<=3)行第j(1<=j<=3)列表示。第k(1<=k<=9)個宮的位置在第i行,第j列,其中k,i,j滿足:k=3(i-1)+j。設(shè)ak1,ak2,…,akm(1<=m<9)是數(shù)獨(dú)中第k個宮已經(jīng)填充好的m個數(shù)字。

        首先,去掉1-9這九個數(shù)中的ak1,ak2,…,akm(1<=m<=9), 剩下的數(shù)ak(m+1),ak(m+2),…,ak9就是要填充在第k個宮中的剩下的9-m個空白格子里的數(shù)。假設(shè)akj(m+1<=k<=9)填充在第k個宮中第L行第n列的一個空白格子, (1<=L<=3,1<=n<=3, L,n與數(shù)獨(dú)本身的行與列區(qū)別),如果第3*(i-1)+L行與第3*(j-1)+n列任何一個格子里的數(shù)字都與akj(m+1<=k<=9)不相同,那么稱akj(m+1<=k<=9)適合填充在第k個宮中第L行第n列的一個空白格子里 (1<=L<=3,1<=n<=3, L,n與數(shù)獨(dú)本身的行與列區(qū)別)。

        宮填充模型是這樣一種填充原則:如果第k個宮有且僅有一個空白格子適合填akj(m+1<=k<=9),那么akj(m+1<=k<=9)一定填充在該位置,否則,akj(m+1<=k<=9)不填充。

        2 算法描述與實(shí)例測試

        2.1 算法描述

        2.1.1 行填充算法描述

        (1)初始化i=1;

        (2)對第i行進(jìn)行填充,填充原則依據(jù)行填充模型;

        (3)如果第(2)步中有數(shù)字填充在第i行,從第(2)步開始,否則,從第(4)步開始;

        (4)對i自增1,即i=i+1;

        (5)如果i<=9,從第(2)步開始,如果i>9,行填充結(jié)束。

        2.1.2 列填充算法描述

        (1)初始化j=1;

        (2)對第j列進(jìn)行填充,填充原則依據(jù)列填充模型;

        (3)如果第(2)步中有數(shù)字填充在第j列,從第(2)步開始,否則,從第(4)步開始;

        (4)對j自增1,即j=j+1;

        (5)如果j<=9,從第(2)步開始,如果j>9,列填充結(jié)束。

        2.1.3 宮填充算法描述

        (1)初始化k=1;

        (2)對第k個宮進(jìn)行填充,填充原則依據(jù)宮填充模型;

        (3)如果第(2)步中有數(shù)字填充在第k個宮,從第(2)步開始,否則,從第(4)步開始;

        (4)對k自增1,即k=k+1;

        (5)如果k<=9,從第(2)步開始,如果k>9,宮填充結(jié)束。

        2.1.4 主程序算法描述

        Matlab語言以矩陣作為基本變量,鑒于這種特點(diǎn),將數(shù)獨(dú)游戲看作9*9的矩陣,作為變量存儲,數(shù)獨(dú)中沒有填充的數(shù)字用0代替。

        (1)初始化變量nineGrid,變量nineGrid是數(shù)獨(dú)游戲的矩陣表示;

        (2)對矩陣nineGrid分別按行填充算法,列填充算法以及宮填充算法,進(jìn)行填充;

        (3)如果矩陣nineGrid中有0元素,從第(2)步開始,否則,填充結(jié)束,輸出填充結(jié)果。

        2.2 實(shí)例測試

        圖2 測試的數(shù)獨(dú)

        對上面的數(shù)獨(dú)游戲進(jìn)行計(jì)算機(jī)填充實(shí)驗(yàn),使用Matlab編寫程序的M文件有:FillForm.m,GridFill.m, Initianization.m,judgeGridWhFill.m,judgeLineRowWhFill.m,LineFill.m,RowFill.m, searchZeros.m。

        各個M文件的作用:

        (1)文件FillForm.m是主程序;

        (2)文件GridFill.m用來填充數(shù)獨(dú)里九個宮里的數(shù)字;

        (3)文件LineFill.m用來填充數(shù)獨(dú)九行中的數(shù)字;

        (4)文件RowFill.m用來填充數(shù)獨(dú)九列中的數(shù)字;

        (5)文件judgeGridWhFill.m判斷宮是否能夠填充數(shù)字,它會在GridFill.m文件中被調(diào)用;

        (6)文件judgeLineRowWhFill.m判斷行或列是否能夠填充數(shù)字,它會在LineFill.m文件和RowFill.m文件中被調(diào)用;

        (7)文件searchZeros.m用來尋找數(shù)獨(dú)中空格個數(shù);

        (8)Initianization.m文件初始化給出的數(shù)獨(dú)。

        運(yùn)行主程序FillForm.m文件,填充結(jié)果如下:

        圖3 填充后的數(shù)獨(dú)

        可以看出,這種算法填充數(shù)獨(dú)的結(jié)果很好。通過比較發(fā)現(xiàn),該算法比數(shù)獨(dú)解算器中使用的遍歷填充算法的效率更高,速度更快。

        3 結(jié)語

        通過建立排除法填充數(shù)獨(dú)的數(shù)學(xué)模型,在此基礎(chǔ)上,找到利用計(jì)算機(jī)實(shí)現(xiàn)填充數(shù)獨(dú)游戲的一種算法。該算法的優(yōu)點(diǎn)是填充效率高,速度快,不足的地方是該算法不能保證所有的數(shù)獨(dú)都能進(jìn)行填充,這主要是由數(shù)獨(dú)本身的結(jié)構(gòu)造成的。因此,如何找到一種數(shù)學(xué)模型,使得該模型下給出的算法能夠填充任何結(jié)構(gòu)的數(shù)獨(dú),這是本文算法需要改進(jìn)的一個方向。

        [1] Anniezhm.九宮格數(shù)獨(dú)[DB/OL].[2013-11-12].http://baike.baidu.com/view/961.htm.

        [2] 王瓊,鄒晟.數(shù)獨(dú)問題的求解、評價(jià)與生成算法的研究[J].南京師范大學(xué)學(xué)報(bào):工程技術(shù)版,2010,10(1):76-79.

        [3] 李昊.基于圖搜索策略的數(shù)獨(dú)問題算法與實(shí)現(xiàn)[J].通化師范學(xué)院學(xué)報(bào),2009,30(10):43-45.

        [4] 肖華勇,田錚,馬雷.數(shù)獨(dú)基于規(guī)則的逐步枚舉算法設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(5):1035-1037.

        [5] Gustavo Santos-Garcia. Miguel Palomino.Solving Sudoku Puzzles with Rewriting Rules[J].Electronic Notes in Theoretical Computer Science (ENTCS),2007,176(4):79-93.

        [6] 約翰森堡,謝菲爾.大學(xué)算法教程 [M]. 方存正,曹旻,華明,譯.北京:清華大學(xué)出版社,2007:13-15,31.

        [7] 張志涌,楊祖櫻.MATLABA教程R2010a[M].北京:北京航空航天大學(xué)出版社,2010:37-41.

        猜你喜歡
        九宮格格子矩陣
        有趣的九宮格
        成語九宮格
        解密九宮格
        數(shù)格子
        填出格子里的數(shù)
        格子間
        女友(2017年6期)2017-07-13 11:17:10
        格子龍
        初等行變換與初等列變換并用求逆矩陣
        矩陣
        南都周刊(2015年4期)2015-09-10 07:22:44
        矩陣
        南都周刊(2015年3期)2015-09-10 07:22:44
        亚洲免费人成在线视频观看| 成人性生交大片免费5| 伊人中文字幕亚洲精品乱码| 无码人妻久久一区二区三区免费 | www久久久888| 国产福利不卡视频在线| 免费观看a级片| 失禁大喷潮在线播放| 亚洲国产成人资源在线桃色| 久久少妇高潮免费观看| 午夜精品久久久久久久99老熟妇| 纯爱无遮挡h肉动漫在线播放| 在线免费欧美| 国产精品日本一区二区三区在线| 永久免费毛片在线播放| 久久久久久伊人高潮影院| ZZIJZZIJ亚洲日本少妇| 亚洲女同高清精品一区二区99| 99re6在线视频精品免费| 国产成人av性色在线影院色戒 | av一区二区三区亚洲| 亚洲乱熟妇一区二区三区蜜桃| 久久亚洲精品情侣| 躁躁躁日日躁| 欧美日韩视频无码一区二区三| 国产在线不卡免费播放| 亚洲免费一区二区av| 国产人妖网站在线视频| 色综合视频一区中文字幕| 国产一区二区三区小说| 搞黄色很刺激的网站二区| 亚洲av成人无码久久精品老人| 精品无码国产自产野外拍在线| 香蕉亚洲欧洲在线一区| 三级日本理论在线观看| 久久视频在线| 日韩秘 无码一区二区三区| 国产午夜精品综合久久久| 看久久久久久a级毛片| 国产va在线观看免费| 亚洲 暴爽 AV人人爽日日碰 |