数独设计
軟件工程第二次作業(yè)
1、github地址
2、解題思路:
3、設(shè)計(jì)實(shí)現(xiàn):
代碼中運(yùn)用了三個(gè)函數(shù)(初始化函數(shù)、判斷函數(shù)、主函數(shù)),核心是判斷函數(shù)。
4、代碼顯示:
頭文件:
#include "stdafx.h"
#include "cstdlib"
#include "time.h"
#include "algorithm"
#include "iostream"
#include "fstream"
判斷函數(shù):
bool judge(int i, int j){ if (i > 9 || j > 9)return true; for(int k=1;k<=9;k++) {bool can = true;for(int m =1;m<i;++m)if (sodu[m][j] == k){can = false;break;}if (can){for(int n=1;n<j;++n)if (sodu[i][n] == k ){can = false;break;}}if (can){int x = (i / 3) * 3 + 3;int y = (j / 3) * 3 + 3;if (i % 3 == 0){x = i;}if (j % 3 == 0){y = j;}for (int p = x - 2; p <= x; ++p) // 檢查在3×3的小方格中是否出現(xiàn)了同一個(gè)數(shù)字{if (can == false) //跳出外層循環(huán) break;for (int q = y- 2; q <= y; ++q)if (sodu[p][q] == k){can = false;break;}}}if (can){sodu[i][j] = k;if (j<9){if (judge(i, j + 1)) //到同一行的下一位置開(kāi)始搜索 return true;}else{if (i < 9){if (judge(i + 1, 1)) // 到下一行的第一個(gè)空格開(kāi)始搜索return true;}elsereturn true; //i >= 9 && j >= 9 , 搜索結(jié)束 }sodu[i][j] = 0; //關(guān)鍵這一步:找不到解就要回復(fù)原狀,否則會(huì)對(duì)下面的搜索造成影響 } } return false; //1到9都嘗試過(guò)都不行,則返回遞歸的上一步 }初始化函數(shù):
void init(void){ for (i = 1; i < 10; i++) {for ( j = 1; j < 10; j++)sodu[i][j] = 0; } // 初始化 for (int i = 1; i <= 9; i++) {sodu[1][i] = i;} sodu[1][1] = num; sodu[1][num] = 1; //按要求固定第一個(gè)數(shù),然后該數(shù)為序號(hào)對(duì)應(yīng)的數(shù)與其交換 random_shuffle(&(sodu[1][2]), &(sodu[1][10])); //第一個(gè)數(shù)固定,后八位隨機(jī)排列judge(2, 1); //從第二行第一個(gè)數(shù)開(kāi)始判斷 }主函數(shù)(輸出函數(shù)):
int main() { ofstream fout("soduku.txt"); //按要求輸出.txt文件 cin >> N; for (int w = 0; w < N; w++) {init();for (int i = 1; i <= 9; i++){for (int j = 1; j <= 9; j++)fout << sodu[i][j] << " ";fout << endl;}fout << endl; } fout << flush; fout.close(); return 0;}
5:、函數(shù)關(guān)系:
6、實(shí)驗(yàn)結(jié)果:
7、性能分析:
性能分析后,發(fā)現(xiàn)自己的代碼程序跑的很慢。然后將其輸出函數(shù)改為以下(快了一點(diǎn)點(diǎn)):
freopen("soduku.txt", "w", stdout); N = 100000; for (int w = 0; w < N; w++) {init();for (int i = 1; i <= 9; i++){for (int j = 1; j <= 9; j++)printf("%d ",sodu[i][j]);putchar('\n');}putchar('\n');}8、PSP表格(感覺(jué)自己做的時(shí)候沒(méi)有按照這些步驟來(lái)):
9、實(shí)踐總結(jié):
這次實(shí)踐,讓我感受到了很大的壓力。很多都是剛接觸的新軟件,新的IDE,一時(shí)沒(méi)有很好的適應(yīng)下來(lái)。熟悉軟件的過(guò)程中經(jīng)常出錯(cuò),而且一出錯(cuò)不知道怎么返回上一步,只好從頭再來(lái)。還有就是編碼的過(guò)程,讓我體會(huì)到和同學(xué)一起討論的樂(lè)趣,慢慢的收獲越來(lái)越多,雖然最后的代碼不是很好,但對(duì)自己來(lái)說(shuō)也算是一個(gè)小小的進(jìn)步了。繼續(xù)加油。轉(zhuǎn)載于:https://www.cnblogs.com/wwgsdh/p/7500997.html
總結(jié)
- 上一篇: Git 基本工作流程
- 下一篇: Maven一:maven的下载和环境安装