我的github mrhe-husky其實我看到題目首先想到的並不是怎麼去完成,而是想起了高中和前後左右桌互相傳看《意林》的時間,在看完大部分的文章後,附錄的數獨題便成了最後的樂趣點,雖然很少有人能夠完全解出,但大家還都是都樂在其中。然後想起我的ubuntu虛擬機器上正好有個自帶的數獨遊戲,於是就久違地玩了一把...
emmmm....雖然是最基礎的數獨,但解出的時間並不理想,而且還浪費40多分鐘的打**時間(>_
我是從傳統的9階入手解題,之後再向低階擴充套件(之後擴寫的過程感覺也比較輕鬆)
較為機械性的解數獨還是得用到排除法,排除掉所有不可能的取值後唯一確定乙個數填入,之後再進行遞迴直到解出所有的能確定的值為止。由此我們建立乙個類,它需要做到:
<1> 能儲存本元素所剩的所有可能取值
<2> 能夠根據同行、列、塊進行可能取值排除
<3> 進行自我檢查,若自身的值能夠確定則呼叫同行、列、塊的元素排除掉新確定的元素並自我檢查(遞迴)能否確定值。
類定義:
主要遞迴函式:
以上為主要函式,完整**見githubint element::selfcheck(int i, int j, element ele[10], int m)
}if (s == 2)
for (ci = 1; ci <= m; ci++)
if (m == 4 || m == 6 || m == 8 || m != 9) }}
}}return 0;
}
做到這裡完成初步**後再去玩虛擬機器上的數獨遊戲,速度明顯得到了提公升(
當然,在真正的遊戲中這會石錘成作弊行為,並且與追尾黑色高階車同等需道歉三回來求得寬恕,因此不推薦這麼做。
完成主體後接著是檔案的io,這一部分功能由於之前很少使用到由此十分陌生,在反覆翻看書本和看了很多網上的資源後才學會了如何使用命令列引數和檔案io方式,寫**過程中大部分時間都在查資料,順帶感慨自己基礎不牢,在這些地方花了很長時間。
相較於c不同,c++進行檔案io操作簡化了很多;
c語言需要先定義檔案指標file*,然後再使用open函式來關聯指標和檔案,之後再使用read()和write()函式來讀寫,操作完之後再呼叫close來關閉檔案防止出錯,較為麻煩;接著來看c++;
使用了3~9階的資料進行測試,以下為檢測結果/*此段只為樣例說明,不可直接執行*/
fstream infile(**char, ios::in); //指定輸入檔案流物件infile(可以自己定義名字,ios::in 為操作方式)
fstream outfile(**char, ios::out); //指定輸出檔案流物件outfile(可以自己定義名字,ios::out為操作方式)
infile >> 輸入物件;
outfile << 輸出物件;
/*和普通cin,cout完全相同的操作,可讀入自動識別讀入多種資料型別十分方便,標頭檔案*/
使用visual studio的效能探測器進行分析
高耗能段:
本為了方便直接在cmd中觀察結果的測試**居然佔了21%的消耗,這點還是比較出乎意料的。。
首先體會最深的就是按時交付這項,超時直接0分,為了這點熬了兩次夜..
程式可擴充套件性:從9階解1個數獨往3~9階解多個數獨擴充套件,同時增加檔案io功能,中間有許多變更,不過我的初稿和最後完成版本也只有50行的差距,這或許得歸功於使用物件導向方法並且類函式分化,改動時只需要變動一點增加些開關就足夠。
注釋很重要。
---end---
軟體工程實踐2019第三次作業
github psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 小時 planning 計畫1h 0.5h estimate 估計這個任務需要多少時間 22h21h development 開發5h 3hanalysis 需求分析 包括學習新技...
軟體工程實踐2019第三次作業
psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫60min 60min estimate 估計這個任務需要多少時間 24h25h development 開發5h 3hanalysis 需求分析 包括學習新技術 2...
2019軟體工程實踐第三次作業
只能用於三宮格的菜鳥 psp psp預估耗時 小時 實際耗時 小時 計畫1 0.5估計這任務需要多少時間 2719開發3 2需求分析31 生成設計文件12 設計複審 20.5 規範 1.50.5 具體設計 20.5 具體編碼63 複審35 測試22報告 11測試報告 10.5 計算工作量 10.5 ...