利用程式隨機構造出n個已解答的數獨棋盤。
**輸入**: 數獨棋盤題目個數n(0< n<=1000000)
**輸出**:隨機生成n個 不重複的已解答完畢的 數獨棋盤,並輸出到sudoku.txt中,且左上角的第乙個數為:(學號後兩位相加)% 9 + 1先初始化乙個二維陣列sudoku[9][9],再往裡面填數字,而第乙個數字是規定的,我的值為5,通過回溯呼叫,分別滿足行和列和小九宮格中數獨的條件就可以填數字。而在遍歷陣列的時候回溯呼叫的關鍵字count很重要,這是我在查資料時發現的乙個很巧妙的地方,附上[傳送門](假設想x,y來表示座標時,令x = count/9,y = count%9;則當隨著count值的增大,就可以實現9*9宮格的遍歷。然後關於輸出方面的內容,我選擇和其他同學一樣的方法,即字元輸出方法,節省了很多時間。- 茫然
剛開始那到題目的時候不知道從何做起,況且在家網路不好,也催生了我的惰性,然後越拖越久,直到來了學校,但是又要補考,又得從新擱淺,我覺得我最大的問題不在技術方面的,而是在於自己的心態,不能擺正好自己的位置,導致一拖再拖。這點一定要做出改變。
- 亂麻
在搜尋資料時,發現了好幾種演算法,有矩陣變換,有填數法和回溯法,我本來是想通過第二種方法來做的,礙於遲遲沒有寫出**不得不想另一種方法。然後問了同學的思路,用了回溯法才恍然大悟。
- 短板判斷行
for(value = 0; value < 9; ++value)
判斷列
for(value = 0; value < 9; ++value)
判斷宮格
int wightx = x/3*3;
int wighty = y/3*3;
int temp;
for(value = wightx; value < wightx + 3; ++value)//檢查九宮格裡}}
核心**--回溯
void backtrace(int count,file* fp)//回溯呼叫
ch[flag++] = '\n';
}ch[flag++] = '\n';
fputs(ch,fp);
flag = 0;
return ;
}int row = count/9;
int col = count%9;
if(sudoku[row][col] == 0)
sudoku[row][col]=0;
}sudoku[row][col] = 0;
}else
}
測試執行
結果:效能分析
摘要
一共用了26秒
從**分析可以看出除以9這個運算佔了很大時間,還有就是yesdis函式也可以有改進的地方。
psp表
psp2.1
personal software process stages
預估耗時(分鐘)
實際耗時(分鐘)
planning
計畫· estimate
· 估計這個任務需要多少時間
2401400
development
開發· analysis
· 需求分析 (包括學習新技術)
6060
· design spec
· 生成設計文件
3030
· design review
· 設計複審 (和同事審核設計文件)300
· coding standard
· **規範 (為目前的開發制定合適的規範)300
· design
· 具體設計
4530
· coding
· 具體編碼
200200
· code review
· **複審
4530
· test
· 測試(自我測試,修改**,提交修改)
200180
reporting
報告· test report
· 測試報告
2020
· size measurement
· 計算工作量103
· postmortem & process improvement plan
· 事後總結, 並提出過程改進計畫
2030
合計930
2013
學習進度條
第n周新增**(行)
累計**(行)
本週學習耗時(小時)
累計學習耗時(小時)
重要成長
1144
14433.5
33.5
鞏固了回溯演算法的知識
執行力是有效利用資源、保質保量達成目標的能力,我覺得這個和乙個人的經歷和努力有關,如果對既定的目標不付出應有的行動,就成了題目所說的泛泛而談。那樣做又何必呢?所以要努力提高執行力,對自己所說的事所做出的承諾負責到底。然而光說是不管用的,要付諸行動。
泛泛而談,浮於表面。這是很多人的詬病,有時我也會模稜兩可。所以要經常提醒一下自己是否重蹈覆轍了,努力養成一種徹底,堅定的習慣。
轉眼就大三了,實感慚愧,從來都沒有為了一件事早起努力奮鬥過,感覺大學生活一下子就過了一半,我到底來這裡追求什麼?我也常常這樣問自己。老是說要是有高三一半的精神就好了卻也只是說說而已,泛泛而談在我身上明顯的印證了。不過最近還好,藉著複習補考的勢頭,堅持了一周多的時間在圖書館晚自習,既然心中已經有了目標,我也要重整旗鼓,揚帆起航了!
最後,一定要養成晚上去圖書館自習看書的習慣!!
end!
第二次作業 個人專案實戰 數獨
剛開始泛看 構建之法 的時候,還是覺得非常難理解裡面的內容,特別是 部分。後來第二次拿起這本書,從第一章開始看起,慢慢了解了 軟體企業 軟體 商業模式 和對軟體工程的定義,但是更多地還是記憶了一遍,沒有明白這裡面的深意 看第二章的時候,跟著單元測試 回歸測試的 效能分析的內容自己照著書上的 敲了一敲...
第二次作業 個人專案實戰
2,psp2.1 personal software process stages 預估耗時 分鐘 planning 計畫20 estimate 估計這個任務需要多少時間 20development 開發490 analysis 需求分析 包括學習新技術 60 design spec 生成設計文件 ...
第二次作業 個人專案實戰
github專案位址 作業位址 利用程式隨機構造出n個已解答的數獨棋盤 輸入 數獨棋盤題目個數n 輸出 隨機生成n個 不重複 的 已解答完畢的 數獨棋盤,並輸出到sudoku.txt中,輸出格式見下輸出示例。在生成數獨矩陣時,左上角的第乙個數為 學號後兩位相加 9 1。例如學生a學號後2位是80,則...