數學建模-Argyle(數獨)問題.doc_第1頁
數學建模-Argyle(數獨)問題.doc_第2頁
數學建模-Argyle(數獨)問題.doc_第3頁
數學建模-Argyle(數獨)問題.doc_第4頁
數學建模-Argyle(數獨)問題.doc_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

論文題目:Argyle問題 姓名1:學號:專業:姓名2:學號:專業: 姓名3:學號:專業:2013年 07 月 17 日目錄一.摘要2二.問題的重述2三.問題的分析3四、模型建立34.1模型假設34.2符號說明34.3模型的建立與求解3(1)問題1解析4(2)問題2解析4五.模型的評價與改進6六.參考文獻6七、附錄61.摘要九宮格數獨,是一種源自18世紀末期的瑞士,之后在各個國家發展。數獨盤面是個九宮,每一宮又分為九個小格。在這八十一格中給出一定的已知數字和解題條件,利用邏輯和推理,在其他的空格上填入1-9的數字。使1-9每個數字在每一行,每一列和每一宮中都只出現一次。這種游戲全面考驗做題者觀察能力和推理能力。而Argyle數獨除了滿足標準數獨的要求外,還要求標出的對角線上的數字也不重復。這一要求加深了解開數獨的難度。所以,解開Argyle數獨,關鍵在于很多點的候選值又很多,需要不斷的嘗試、不斷的排除的這樣一個過程。因此,通過使用Matlab軟件編寫代碼來代替人腦進行嘗試與排除,這樣既節省了求解者的解題時間,同時也將當代計算機科技技術運用到解題的實踐中,豐富了數學建模的解題靈活性,加強了求解的嚴謹性。針對問題1、2,可以將其統一化為一個問題,運用Matlab軟件編寫代碼,之后通過建立“數獨”矩陣,改變其大小,從而求解不同的Argyle問題。關鍵詞:候選數、Argyle數獨要求、Matlab軟件2.問題的重述Argyle問題Argyle數獨是標準數獨的變形,標準數獨是根據99盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個粗線宮內的數字均含1-9,不重復。每一道合適的數獨謎題都有且僅有唯一答案,推理方法也以此為基礎,任何無解或多解的題目都是不合格的。Argyle數獨除了滿足以上要求之外,同時還要求標出的對角線上的數字也不重復。如下圖所示:現有以下問題待求解:根據以上描述,試完成以下問題:1.用matlab進行求解;2.利用matlab畫出各個問題及解答的圖形。3.問題的分析這兩個問題的核心在于如何用matlab來代替人來進行求解中候選數的嘗試與排除這一重復的過程。且必須用matlab畫出兩個問題及解答的圖形,此必須用到matlab中的plot與text這兩個函數分別進行線與數字的顯示工作。我們小組的思路是運用matlab中語言的If語句與For語句進行對問題的候選數進行篩選,先將滿足的候選數存儲在C中,之后再進行篩選,得到滿意的答案。之后將所求結果放入事先準備好的九宮格中,使其一一對應,最終得出結果。4.模型建立4.1模型假設所有Argyle問題都是99盤狀所有Argyle都必須依照數獨游戲的基本規則進行所有Argyle無數字的方格都填0來轉化為99矩陣4.2符號說明A所求解問題所轉化的矩陣candidates求解問題候選數的函數sudoku解出數獨問題的函數(遞歸法)C存儲候選數X結果矩陣4.3模型的建立與求解問題1解析根據所輸入的矩陣來進行求解;在輸入頁面輸入矩陣:A=0,0,8,0,0,0,0,0,2; 0,0,0,0,7,3,0,0,0; 0,6,3,0,0,0,0,0,7; 0,4,0,0,0,9,0,7,0; 0,0,0,0,0,0,0,0,0; 6,0,0,0,0,0,8,5,1; 0,2,0,0,0,0,0,0,5; 0,0,0,4,0,0,0,0,0; 0,9,0,5,0,0,0,0,0;將候選數先行選出,排除一行、一列、一宮格里數字相同的情況;通過for語句的循環效果,先將一個數字填入矩陣中,之后利用遞歸法,將所有符合的數字填入矩陣中;最后,將矩陣上的數一一對應在九宮格框里,得出結果。如下圖所示:問題2解析根據所輸入的矩陣來進行求解:在輸入頁面輸入矩陣:A=0,8,0,0,0,0,0,0,0; 0,1,0,0,2,5,0,4,3; 0,0,2,0,0,0,0,5,0; 0,0,0,9,0,3,0,0,0; 0,2,0,0,0,0,0,8,0; 0,0,0,0,0,0,0,0,0; 3,0,7,0,8,0,6,0,0; 0,0,0,0,7,0,1,0,0; 0,0,0,0,5,0,0,0,8;同問題1一致,得出結果:如下圖所示:5.模型的評價與改進5.1優點:此模型運用matlab軟件進行求解,大大增添了該模型的規范化。同時,通過輸入矩陣的不同,從而達到解析不同的Argyle問題。此模型中運用了遞歸法,從而將程序大大簡化了,加強了該模型的使用性,使得將該算法的合理性加強了。5.2缺點與改進:此模型中,在運行之前必須輸入原問題的矩陣式,從而使得程序能夠運行。這樣一來,將求解時的輸入時間增加了。因此,應該用程序將隱藏在問題中的矩陣式直接找出來,而不是人工輸入,這樣一來將會節省更多的時間,使得該模型更加完善。6.參考文獻1. Matlab程序設計與應用(第二版)劉衛國 主編2. sudokkusudoku-Cleve Moler=Experiments with MATLAB-chapter18-2009年7.附錄7.1問題1代碼:clear;clc;close allhold on;for i=0:9 if rem(i,3)=0 plot(0,9,i,i,k,LineWidth,3) else plot(0,9,i,i,k,LineWidth,2) endendtext(8.5,3.5,1)text(8.5,8.5,2)text(1.5,2.5,2)text(2.5,6.5,3)text(5.5,7.5,3)text(1.5,5.5,4)text(3.5,1.5,4)text(3.5,0.5,5)text(7.5,3.5,5)text(8.5,2.5,5)text(0.5,3.5,6)text(1.5,6.5,6)text(4.5,7.5,7)text(7.5,5.5,7)text(8.5,6.5,7)text(2.5,8.5,8)text(6.5,3.5,8)text(1.5,0.5,9)text(5.5,5.5,9)for j=0:9 if rem(j,3)=0 plot(j,j,0,9,k,LineWidth,3) else plot(j,j,0,9,k,LineWidth,2) end end plot(4,9,0,5,k,LineWidth,1) plot(1,9,0,8,k,LineWidth,1) plot(0,8,1,9,k,LineWidth,1) plot(0,5,4,9,k,LineWidth,1) plot(0,5,5,0,k,LineWidth,1) plot(0,8,8,0,k,LineWidth,1) plot(1,9,9,1,k,LineWidth,1) plot(4,9,9,4,k,LineWidth,1) A=0,0,8,0,0,0,0,0,2; 0,0,0,0,7,3,0,0,0; 0,6,3,0,0,0,0,0,7; 0,4,0,0,0,9,0,7,0; 0,0,0,0,0,0,0,0,0; 6,0,0,0,0,0,8,5,1; 0,2,0,0,0,0,0,0,5; 0,0,0,4,0,0,0,0,0; 0,9,0,5,0,0,0,0,0; X = sudoku(A) for i=1:9 for j=1:9text(j-0.5,9.5-i,num2str(X(i,j); endend function X = sudoku(X)C,s,e = candidates(X);while isempty(s) & isempty(e)X(s) = Cs;C,s,e = candidates(X);endif isempty(e)returnendif any(X(:) = 0)Y = X;z = find(X(:) = 0,1); for r = Cz X = Y;X(z) = r;X = sudoku(X);if all(X(:) 0) returnendendendfunction C,s,e = candidates(X)C = cell(9,9);tri = (k) 3*ceil(k/3-1) + (1:3);for j = 1:9 for i = 1:9 if X(i,j)=0 z = 1:9; z(nonzeros(X(i,:) = 0; z(nonzeros(X(:,j) = 0; z(nonzeros(X(tri(i),tri(j) = 0; Ci,j = nonzeros(z); end endendL = cellfun(length,C); s = find(X=0 & L=1,1);e = find(X=0 & L=0,1);end7.2問題2代碼:clear;clc;close allhold on;for i=0:9 if rem(i,3)=0 plot(0,9,i,i,k,LineWidth,3) else plot(0,9,i,i,k,LineWidth,2) endendtext(8.5,3.5,1)text(8.5,8.5,2)text(1.5,2.5,2)text(2.5,6.5,3)text(5.5,7.5,3)text(1.5,5.5,4)text(3.5,1.5,4)text(3.5,0.5,5)text(7.5,3.5,5)text(8.5,2.5,5)text(0.5,3.5,6)text(1.5,6.5,6)text(4.5,7.5,7)text(7.5,5.5,7)text(8.5,6.5,7)text(2.5,8.5,8)text(6.5,3.5,8)text(1.5,0.5,9)text(5.5,5.5,9)for j=0:9 if rem(j,3)=0 plot(j,j,0,9,k,LineWidth,3) else plot(j,j,0,9,k,LineWidth,2) end end plot(4,9,0,5,k,LineWidth,1) plot(1,9,0,8,k,LineWidth,1) plot(0,8,1,9,k,LineWidth,1) plot(0,5,4,9,k,LineWidth,1) plot(0,5,5,0,k,LineWidth,1) plot(0,8,8,0,k,LineWidth,1) plot(1,9,9,1,k,LineWidth,1) plot(4,9,9,4,k,LineWidth,1) A=0,8,0,0,0,0,0,0,0; 0,1,0,0,2,5,0,4,3; 0,0,2,0,0,0,0,5,0; 0,0,0,9,0,3,0,0,0; 0,2,0,0,0,0,0,8,0; 0,0,0,0,0,0,0,0,0; 3,0,7,0,8,0,6,0,0; 0,0,0,0,7,0,1,0,0; 0,0,0,0,5,0,0,0,8; X = sudoku(A) for i=1:9 for j=1:9text(j-0.5,9.5-i,num2str(X(i,j); endend function X = sudoku(X)C,s,e = candidates(X);while isempty(s) & isempty(e)X(s) = Cs;C,s,e = candidates(X);endif isempty(e)returnendif any(X(:) = 0)Y = X;z = find(X(:) = 0,1); for r = Cz X = Y;X(z) = r;X = sudoku(X);if all(X(:) 0) returnendendendfunction C,s,e = candidates(X)C = cell(9,9);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論