軟體工程基礎 個人專案報告之生成數獨題目

2021-10-02 06:15:59 字數 1580 閱讀 9129

專案位址

1、個人專案報告之可行性分析、需求分析、概要設計:

2、個人專案報告之生成數獨終局:

3、個人專案報告之生成終局**優化:

4、個人專案報告之求解數獨:

5、個人專案報告之求解**優化:

6、個人專案報告之生成數獨題目:

7、個人專案報告之單元測試及分支覆蓋率:

從整個個人專案來看,生成數獨題目的部分似乎是附加題中的要求,但是想要分析求解數獨的演算法工作效率、解決求解數獨演算法上的瓶頸,設計實現生成數獨終局的演算法是非常有必要的。

需求分析

因為這一部分的設計並不算是包括在個人專案必做部分中的,所以在一開始的需求分析中並沒有涉及到這一部分的需求分析,所以在具體實現這一部分演算法的時候,有必要進行完整的軟體生命週期法的分析。

在專案中,要求數獨題目的生成是在數獨終局的基礎之上進行挖空。但挖空並不是亂挖,雖然也是隨機的進行挖空,但是還是有一定的前提要求。首先,每一宮中至少要挖去兩個空,除此之外,還要求總的挖空數在30-60個之間。

概要設計

既然是隨機挖空,肯定是使用隨機數進行空的選擇。然後對於專案的兩個要求,我選擇先滿足每一宮中挖兩個,再滿足總數在30-60之間的要求。

**實現

最開始是讀入數獨終局,這一步的方法和求解數獨的第一步一樣,只不過求解數獨讀的是題目,生成數獨題目讀的是數獨終局,這裡就不再進行描述了。

在每一宮中,對於生成要挖的空的位置,必須得保證產生的兩個隨機數不一樣,畢竟一樣的話可能導致需求無法滿足。除此之外,還要避免左上角的固定數字被挖掉。下面是詳細的**:

//先在每個宮取出兩個

for (int k = 0; k < 9; k++)

while (k == 0 && hole[1] == 0) //防止左上角的數被刪掉

while (hole[0] == hole[1])//防止重複

delete_sudoku[3 * (k / 3) + hole[0] / 3][3 * (k % 3) + hole[0] % 3] = 0;

delete_sudoku[3 * (k / 3) + hole[1] / 3][3 * (k % 3) + hole[1] % 3] = 0;

}

下面就得滿足第二個條件:總挖空數在30-60。因為每一宮中已經挖掉兩個空了,所以還需要挖的空的數量在12-42之間,

//還需要取出12-42個

int additional;

additional = 12 + rand() % 31; //決定要取的個數

while (additional--)

到此為止,生成數獨題目的需求就已經實現了,至於**效能方面,因為讀入數獨終局使用的求解數獨部分的讀入數獨題目的方法,所以就沒必要再進行效能方面的優化了,因為再想要優化的話,就只能修改挖空的演算法了。因為在需求分析中就已經明確了更換演算法的不必要性,所以整個對數獨題目生成需求的開發工作就已經完成。

軟體工程基礎 個人專案報告之生成數獨終局

專案位址 1 個人專案報告之可行性分析 需求分析 概要設計 2 個人專案報告之生成數獨終局 3 個人專案報告之生成終局 優化 4 個人專案報告之求解數獨 5 個人專案報告之求解 優化 6 個人專案報告之生成數獨題目 7 個人專案報告之單元測試及分支覆蓋率 解題思路 首先,我們應該明確一點的是,9 9...

軟體工程基礎 個人專案報告之求解數獨

專案位址 1 個人專案報告之可行性分析 需求分析 概要設計 2 個人專案報告之生成數獨終局 3 個人專案報告之生成終局 優化 4 個人專案報告之求解數獨 5 個人專案報告之求解 優化 6 個人專案報告之生成數獨題目 7 個人專案報告之單元測試及分支覆蓋率 解題思路 按照平時玩數獨的習慣,當然只是針對...

軟體工程個人報告

在本學期中,軟體工程由我們敬愛的 親愛的 有責任心的王老師教我們。該課程採用全過程考核機制,從頭到尾,從第一周到最後一周,每一周都有不同的任務,每一周也要有不同的總結,讓我們一直在緊張而又豐富的學習生活中。在這整個學期中,我們的精力精神,都完全被 軟體工程 這門課所深深的吸引著,王老師明燈似的指引著...