下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、javascript遍歷求解數(shù)獨問題的主要思 路小結(jié)數(shù)獨規(guī)則數(shù)獨游戲,經(jīng)典的為9x9=81個單元格組成的九宮格,同時也形成了 3x3=9個 小九宮格,要求在81個小單元格中填入數(shù)字廣9,并且數(shù)字在每行每列及每個 小九宮格中都不能重復(fù)。數(shù)獨技巧 直觀法候選數(shù)法相關(guān)二十格:一個數(shù)字只其所在行列及小九宮格的二十格相關(guān)我的思路精心設(shè)計了有效性判定函數(shù),最多一次遍歷81個小單元格就能做出方案的冇效性判 定。同理設(shè)計了相關(guān)20格判定,一次09的循環(huán)就完成有效性判定。用數(shù)組模擬堆棧,為搜索提供回溯信息。利用對象具有map性質(zhì),來輔助判斷方案的有效性,人人簡化了算法。方案設(shè)計與實現(xiàn)只用了一個二維數(shù)組存儲數(shù)獨方
2、案,一個一維數(shù)組作堆棧,一個布爾變量作回溯 標識。1 變量定義:var problem二/這是書上提到的難度10. 7的題& 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 3, 6, 0, 0, 0, 0, 0,0, 7, 0, 0, 9, 0, 2, 0, 0,0, 5, 0, 0, 0, 7, 0, 0, 0,0, 0, 0, 0, 4, 5, 7, 0,0,0, 0, 0, 1,0, 0, 0, 3,0,0, 0, 1,0, 0, 0, 0, 6,8,0, 0, & 5, 0, 0, 0, 1,0,0, 9, 0, 0, 0, 0, 4, 0, 0 var s
3、tack 二,flag 二 false;2.方案有效性判定:充分利用了 javascript對彖的哈希特性,為了方便調(diào)試,判定有效時函數(shù)的返 回值為0,無效吋分三種情況,行沖突、列沖突、小九宮格沖突,分別返回1, 2, 3o前期判定用了它,后來増加了相關(guān)二十格判定,在找答案時這個函數(shù)就用不 上了。function checkvalid(sudo)let subsudo二/輔助變量,用來判定小九宮格是否沖突for (let i = 0; i<9; i+) let row = , col = /輔助變量,用來判定彳亍、列是否沖突for(let j = 0; j<9; j+) let c
4、url = sudoi j, cur2 = sudoj i/一次內(nèi)循環(huán)同時完成行列的判定if(rowcurl)/當前元素已經(jīng)在行中出現(xiàn),優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷return 1;elserowcurl = curlif(colcur2)/返回錯誤代碼當前元素未在行中岀現(xiàn),存入輔助變量中 /列的判定與行類似,優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷return 2;elsecolcur2二 cur2;let key = math, floor(i/3)+,+math. floor(j/3)/為不同的小九宮格生成不同的keyif (subsudo key) /小
5、九宮格小已經(jīng)有元素,優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷if (subsudokey curl)/對某一個小九宮格的判定與行類似return 3elsesubsudokeycurl = curlelse/這是某小九宮格中的第一個元索subsudo key二/為小九宮格新建一個輔助變量,并將第一個元素存入其中subsudokeycurl = curlreturn 0;程序能運行到這,說明方案有效3 相關(guān)二十格判定原理同整體判定,亮點在小九宮格的定位上。function check20grid(sudo, i, j)let row = , col = , subsudo = /輔助變
6、量for (let k = 0; k < 9; k+) let curl 二 sudoik, cur2 二 sudokjif (curl) 當前元素已經(jīng)在行中出現(xiàn),優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷if (rowcurl)return 1;/返回錯誤代碼e i serowcurl二 curl/當而元素未在行中出現(xiàn),存入輔助變量屮1jif (cur2) /列的判定與行類似,優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷if(colcur2)return 2;elsecolcur2二 cur2;轉(zhuǎn)化循環(huán)變量到小九宮格的坐標let key = sudomath. floor
7、(i/3)*3 +math.floor (k/3)math, floor(j/3)*3+math. floor(k%3)if (subsudokey)/九宮格判定與行類似,優(yōu)化掉零的判斷,key為0時值為0,不需要額外判斷return 3else subsudokey = keyreturn 0;4.遍歷求解利用元素狀態(tài)初值為零的元素即為待定的特性,并加上堆棧的輔助,沒有再開辟 額外的存儲空間。function findanswcr() for (let i = 0; i<9; i+)for (let j = 0; j<9; ) if (problemi j = 0 | | flag) /當前位置為待定元素的首次處理或回溯到當前位置,兩種情況看似不同,其實處理相同,自加1即可 flag = false;let k = problemi j + 1;/搜索向下一個合法值邁進whilc(k<10) /循環(huán)找到卜一個合法值problemi j = k;/填值if (check20grid (problem, i, j) = 0) /判定合法,相關(guān)二十格判stack. push(i, j+)/存儲回溯點,并步進break;k+;if(k>9) problcmi j =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年親子協(xié)議模板
- 2025年增資協(xié)議合同條款
- 2025年度個人承包工程勞務(wù)合同模板4篇
- 2025年合作環(huán)境科學(xué)書籍出版協(xié)議
- 攪拌站項目合作開發(fā)合同(二零二五年)3篇
- 2025年度環(huán)保認證木地板采購與施工合同4篇
- 2025年度鄉(xiāng)村旅游資源承包經(jīng)營權(quán)轉(zhuǎn)讓合同4篇
- 2025年度股權(quán)質(zhì)押擔(dān)保與文化產(chǎn)業(yè)融合發(fā)展合同
- 二零二五年度足療養(yǎng)生館加盟投資協(xié)議
- 2025年度美容院美容師服務(wù)提成勞務(wù)合同模板
- 2024-2030年中國海泡石產(chǎn)業(yè)運行形勢及投資規(guī)模研究報告
- 動物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計劃書
- 2024山西省文化旅游投資控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 科普知識進社區(qū)活動總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科專科監(jiān)測指標匯總分析
- 混凝土結(jié)構(gòu)工程施工質(zhì)量驗收規(guī)范
評論
0/150
提交評論