個人專案 數獨

2021-08-19 05:19:49 字數 1374 閱讀 5879

個人專案——數獨

再附psp表乙份:

personal software process stages

估計耗時(分鐘)

實際耗時(分鐘)

計畫30

40需求分析(包括學習新技術)00

生成設計文件00

設計複審00

**規範00

具體設計

300360

具體編碼

600530

**複審

5030

測試200

230測試報告

6050

總結改進

6050

合計1300

1290

解題思路:

該個人專案有兩項要求,乙個是生成數獨終局,還有乙個是解數獨再把解出來的數獨儲存到程式根目錄中。

第乙個要求:

可以知道,對於任何乙個1~9的全排列,都可以通過向左或者向右移動固定不變的列數來得到乙個新的終局。這樣就有9!種終局。

其實,還可以看到,對於任何乙個數獨終局的1~3行,任意交換這三行的順序,也是乙個數獨終局,4~6行和7~9行同理,列也同理。通過這個發現可以在之前的基礎上又能有所增加,最終是可以超過1e6個的。

第二個要求:

為了不讓腦細胞死得太多,於是我就直接用dfs暴搜的方法把這問題給解了……

dfs部分**

int hang = count / 9;

int lie = count % 9;

if (plate[hang][lie] == 0)

plate[hang][lie] = 0;

} else solve(count + 1);

-------------------

總結這裡還是要慚愧地說一下,我到現在還不太會弄vs效能分析工具,所以也就沒有再貼**的效能圖示了……

然後再說說我不足的地方,首先我對文件、模組的建立概念完全不清晰,我所有的功能函式都寫在乙個檔案裡,其實這與懶脫不了干係……

接著我也了解到一些網友在第二個要求:解數獨運用了效率更高的函式功能dlx,將解數獨轉化成了乙個精確覆蓋問題,並用dancing links x即dlx演算法來解決精確覆蓋問題,但從來沒有仔細揣摩揣摩去實現這項功能。

其實總結起來就是這兩個問題,還是有很多遺憾的地方和提公升空間。

心路歷程和收穫

說實話,剛開始寫個人專案的時候,那真是摸不著頭腦。沒辦法,最後都是需要朋友們的幫助才有思緒,把乙個個「難題」給弄通了。其實與其說是朋友們的幫助,還不如說我網上收資料乙個個翻出來呢……

說真心話,我一開始就被系統輸入變數引數如何操作給弄懵了,還有如何運用getopt函式也是弄得我焦頭爛額。

最後的最後我想總結三點收穫:

1.不要拖。

2.不畏難。

3.不停學。

個人專案數獨

2 每一行都要有1 9這9個數字填入 3 每一列都要有1 9這9個數字填入 4 每一塊都要有1 9這9個數字填入。所以,01模型中列的定義就出來了。i,j,k表示在棋盤上i行j列填入數字k。1到81,表示棋盤中9 9 81個格仔是否填入了數字。如果是,則選取的01行在該01列上有1。對應的01列編號...

個人專案 數獨遊戲

數獨 二 生成數獨終局 數獨 三 解數獨 數獨 四 測試與效能分析 數獨 五 總結 數獨 六 ui介面 下面是我預計在專案上花費的時間。psppersonal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫25 estimate 估計任務用時 ...

軟體工程個人專案 數獨

專案位址 github倉庫 psp 2.1 personal software process stages 預計耗時 分鐘 實際耗時 分鐘 planning 計畫50 60estimate 估計這個任務需要多久 300360 development 開發240 270analysis 需求分析 2...