利用matlab解数独clevemolermatlab发明人.pdfVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用matlab解数独clevemolermatlab发明人

利用利用MATLAB 解數獨解數獨 利用利用 解數獨解數獨 By Cleve Moler, MATLAB 發明人 人腦和電腦程式兩者是使用非常不同的求解方法來解數獨(Sudoku)問題。用人工手算找出數獨 答案的魅力 ,在於玩家能夠自行發現以及掌握無數的微妙組合,和提供最後解答的線索模式 ;而 這種人腦的模式識別能力和解題過程,是很不容易用電腦程式複製的。由於這個原因,大多數解 數獨的電腦程式用的是另一種不同的方式:仰賴電腦近乎無限的運算能力去進行反覆試驗、不斷 ® 摸索(trial and error) ;在這邊我用的方法,就是用MATLAB 解題 。 解數獨的挑戰解數獨的挑戰 解解數獨的挑戰數獨的挑戰 正如你所可能知道 ,解一則數獨需要填滿 9x9 的方格 ,而每一行、每一列、以及所分出的 9 個 主要3x3 區塊,必須包含 1 到9 所有數字 。題目一開始有些方格會先填有數字 ,這些數字為解 題的線索 。相較於魔方陣(magic squares)和其他數字謎題 ,數獨並不需要算術 ,格子中所要填 的內容 ,也可以改成是英文字母或是其他符號 。 圖一為題目開始的方格。我特別喜歡這個例子中的對稱性,這個題目是由University of Western Australia 的Gordon Royle 所設計的 。圖二則是這個例子的解答。 圖一 :數獨題目範例,線索數字以藍字 圖 :完整解答 。其他空格都已填滿 標示 。這個例子中有討人喜歡的對稱 數字 ,使每行、每列、和主要3×3 的 性。 區塊都包含數字 1 到 9 。 用遞迴回溯法用遞迴回溯法(Recursive Backtracking)解數獨解數獨 用遞迴回溯法用遞迴回溯法 解數獨解數獨 我們的 MATLAB 程式只使用一個樣本(pattern)單一物件(singletons) ,連同基本的電腦科學技 術遞迴回溯法 。 要了解該程式如何運行,我們可以先用一個簡單的4x4 方格(含有2x2 區塊)為例說明。這類的謎 題另被稱作Shidoku ,而不叫Sudoku(數獨) ,因為「Shi 」在日文是「四」的意思。 圖三為我們第一個 Shidoku 謎題,圖四到六顯示其解題過程 。在圖四中,可能填入的項目或候 選數字以小字表示 。例如,第二列包含一個 「3 」,第一行有一個 「1」,所以在位置(2,1)的候選 數字是「2 」和「4 」。而所有的空格中 ,有四個方格僅有唯一的數字答案 ,這些方格就叫單一物 件(singletons) 。這個例子可以藉由找出僅有唯一解的單一物件方格,很快地解出答案。在圖五, 我們填入其中一個單一物件方格後(位置(4,1)填入 「3 」) ,再重新考量所有候選數字 。圖六,我 們填滿其他剩餘的單一物件方格後 ,最後的解答就出現了。 圖三:Shidoku 是只有 4x4 的 圖一 :填入所有的候選數字。紅色 數獨 。 字體的數字即為單一物件 。 圖五:填入單一物件 「3」後,再重 圖六:填入其他剩餘的單一物件方 新考量所有候選數字 。 格,解題完成 。 一個簡單的數獨謎題可能被認定為用插入單一物件的方式就能解決。若以這個說法來看,我們的 第一個例子是簡單的,但下面的例子並非如此。 圖七題目所顯示的數字組合可由以下MATLAB 的宣告產生 : X = diag(1:4) 圖七 :shidoku(diag(1:4)) 因為圖八的例子中,無法找到單一物件,我們將使用遞迴回溯法來解題。我們挑選一個空格,一 開始先填入它的其中一個候選數字。而每個候選數字在MATLAB 裡我們用X(:)表示(例如:X(1)=1, X(2)=2…) ,並根據數字大小的順序去嘗試每一個可能數字。我們在位置(2,1)方格填入「3 」之後, 變成一個新的謎題(圖九) ,接著遞迴呼叫這個程序。 圖八 :所有的候選數字。完全沒有

文档评论(0)

ailuojue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档