個人項目_1120161935
Github地址:https://github.com/wln772777917/-------
PSP表格
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
5 |
10 |
· Estimate |
· 估計這個任務需要多少時間 |
5 |
10 |
Development |
開發 |
|
|
· Analysis |
· 需求分析 (包括學習新技術) |
120 |
1000 |
· Design Spec |
· 生成設計文檔 |
30 |
60 |
· Design Review |
· 設計復審 (和同事審核設計文檔) |
0 |
0 |
· Coding Standard |
· 代碼規範 (為目前的開發制定合適的規範) |
10 |
30 |
· Design |
· 具體設計 |
60 |
120 |
· Coding |
· 具體編碼 |
180 |
300 |
· Code Review |
· 代碼復審 |
0 |
0 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
120 |
1000 |
Reporting |
報告 |
60 |
120 |
· Test Report |
· 測試報告 |
30 |
30 |
· Size Measurement |
· 計算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出過程改進計劃 |
30 |
120 |
|
合計 |
660 |
2810 |
核心代碼:
用回溯方法求解數獨
求解數獨:直接按照此方法每個殘局生成一個終局。
生成終局;相當於只有左上角一個數的殘局。
void backtrace(int count,int max) //count表示回溯層數 max表示輸出終局個數
{
if(num>=max)//num表示已輸出終局個數
return;
else if(count==81&&num<max)
{
for(int i = 0; i < 9; ++i)
for(int j = 0; j < 9; ++j)
{
if(j==8)
fprintf(fp1,"%d\n",map[i][j]);
else
fprintf(fp1,"%d ",map[i][j]);
}
fprintf(fp1,"\n");
num++;
return;
}
int row = count / 9;
int col = count % 9;
if(map[row][col] == 0)
{
for(int i = 1; i <= 9; ++i)
{
map[row][col] = i;//賦值
if(isPlace(count))//可以放
backtrace(count+1,max);//進入下一層
}
map[row][col] = 0;//回溯
}
else
backtrace(count+1,max);
}
解題思路:
由於一開始接觸過回溯,就考慮了一下回溯算法,發現應該可行,不過時間復雜度可能會很高。通過81個位置挨個放數來實現數獨的求解。由於文件輸入和輸出在以前學習C語言的時候沒有掌握,一頭霧水,於是選擇了直接輸出,發現時間並沒有超過要求。後來通過穩同學學會了怎麽用命令行。然後通過閱讀C程序設計(第四版)第10章對文件的輸入和輸出基本掌握了文件的操作。
個人項目_1120161935