ソフトウェア工学におけるジョブの3番目の数字のみ
リストアイテム
タグ(スペースで区切っ):未分類
githubのプロジェクト住所:https://github.com/jjsgxty/031702510
PSPテーブル
PSP2.1 | パーソナルソフトウェア プロセス段階 |
推定時間がかかる(分) | 実際の消費(分) |
---|---|---|---|
プランニング | 計画 | 50 | 30 |
推計 | このタスクが必要とどのくらいの時間を見積もります | 50 | 30 |
開発 | 開発 | 240 | 300 |
分析 | ニーズ分析 (新しい技術を学ぶ含みます) |
120 | 180 |
デザインスペック | 設計ドキュメントの生成 | 60 | 30 |
デザインレビュー | デザインレビュー | 30 | 20 |
標準コーディング | コードの仕様 (開発のための適切な規範の開発) |
30 | 20 |
設計 | 具体的な設計 | 60 | 60 |
コーディング | 具体的なコーディング | 240 | 180 |
コードレビュー | コードレビュー | 180 | 120 |
テスト | 検査 (セルフテスト、修正、変更をコミット) |
180 | 180 |
報告 | レポート | 60 | 60 |
試験報告書 | テストレポート | 20 | 20 |
サイズ測定 | コンピューティングのワークロード | 10 | 10 |
死後&プロセス< | その後まとめ、およびプロセス改善計画 | 60 | 60 |
問題解決プロセス
ジャストタイムの仕事を見始めて、DFSを達成するために再帰を使用することができます仕事の要件は3〜9のグリッドを実現することで、私は正方形を完了したいと思いますし、他のグリッドは、さらにそれに変更した後、私は始まりましたJiugonggeコード。
現在のセルがスキップ空でない場合のみ、それぞれ、各グリッド数で決定される1ディープ検索コンストラクタは、正しく充填されて
決定された数は、最初の行が決定され、正しいこと、および2フィル列を決定します最後に、各小グリッド判断
すべての後に3を再帰を終了するには準拠
実装の完了は乗した後、私は、ファイルストリームは、Cについての本の内容を読んで、知らない++のファイルストリーム入力と出力は次のようになります、トラブルがCMDコマンドライン引数で、初めは本当に無知である、ラインパラメータをコマンドが見つかりませんファイルストリームを使用しますが、CMDラインの束が、それが何を意味するのか理解していない、まだ百度パラメータ、最後の、学生は、最終的には徹底的に大まかに理解しました
次いで、他のグリッドの補数は、3,5,7比較的単純なグリッドされ、唯一の各行の各列を決定する必要があるので、私はプロセスに正方形のすべてのグリッドから、まとめ4,6,8,9入力ファイルは、入力ファイル内の他のグリッドに置き忘れるますとき、私は多くの場合、あるテスト・グリッドに正しい出力をすべてが迷惑を見つける見つけるそれぞれの詳細のいくつかの部分に変更することを忘れ、およびI間違っていることが判明し、長いファイルの問題を探しています。まあ、それでも私は慎重にそれをいくつかのことができるようにしたい┭┮﹏┭┮
チェック機能
//判断shu填入n时是否满足条件
bool Check(int n, int shu)
{
//判断n所在横列是否合法
for (int i = 0; i < siz; i++)
{
int j = n / siz; // j为n竖坐标
if (num[j][i] == shu) return false;
}
//判断n所在竖列是否合法
for (int i = 0; i < siz; i++)
{
int j = n % siz; //j为n横坐标
if (num[i][j] == shu) return false;
}
if (siz == 4 || siz == 6 || siz == 8 || siz == 9)
{
int a, b; //a为每个小宫格中横向的格子数,b为纵向格子数
switch (siz)
{
case 4:
a = 2, b = 2;
break;
case 6:
a = 3, b = 2;
break;
case 8:
a = 2, b = 4;
break;
case 9:
a = 3, b = 3;
break;
}
int x = n / siz / b * b; //x为n所在的小宫格左顶点竖坐标
int y = n % siz / a * a; //y为n所在的小宫格左顶点横坐标
//判断n所在的小宫格是否合法
for (int i = x; i < x + b; i++)
{
for (int j = y; j < y + a; j++)
{
if (num[i][j] == shu) return false;
}
}
}
return true; //都合法,返回正确
}
DFS機能
//深搜构造数独
int DFS(int n)
{
int amount = 0;
switch (siz)
{
case 3:
amount = 8;
break;
case 4:
amount = 15;
break;
case 5:
amount = 24;
break;
case 6:
amount = 35;
break;
case 7:
amount = 48;
break;
case 8:
amount = 63;
break;
case 9:
amount = 80;
break;
}
//所有的都符合,退出递归
if (n > amount)
{
sign = true;
return 0;
}
//当前位不为空时跳过
if (num[n / siz][n % siz] != 0)
{
DFS(n + 1);
}
else
{
//否则对当前位进行枚举测试
for (int i = 1; i <= siz; i++)
{
//满足条件时填入数字
if (Check(n, i) == true)
{
num[n / siz][n % siz] = i;
DFS(n + 1); // 继续搜索
//返回时如果构造成功,则直接退出
if (sign == true) {
return 0;
}
//如果构造不成功,还原当前位
num[n / siz][n % siz] = 0;
}
}
}
return 0; //此处不加会有警告
}
主な機能
int main(int argc, char* argv[])
{
int k;
char* in; //输入文件
char* out; //输出文件
int time; //盘面数目
siz = atoi(argv[2]); //atoi (ascii to integer)是把字符串转换成整形数的一个函数
//头文件为 #include <stdlib.h>
time = atoi(argv[4]);
in = argv[6];
ifstream infile(in);
out = argv[8];
ofstream outfile(out);
for (k = 0; k < time; k++) {
char temp[10][10] = { 0 };
int l = 0;
for (int i = siz * k + k; i < siz * k + k + siz; i++)
{
for (int j = 0; j < siz; j++)
{
infile >> temp[i][j];
num[l][j] = temp[i][j] - '0'; // 两个字符相减就是ASCII码之间的减法操作
}
l++;
}
cout << "\n";
sign = false; //此处注意一定要加!!!
DFS(0);
for (int i = 0; i < siz; i++)
{
for (int j = 0; j < siz; j++)
{
cout << num[i][j] << " ";
}
cout << "\n";
}
cout << "\n";
ofstream outfile;
outfile.open("output.txt", ios::app); //以后继方式打开文件以便继续写
for (int i = 0; i < siz; i++) {
for (int j = 0; j < siz; j++) {
outfile << num[i][j] << " ";
}
outfile << endl;
}
outfile << "\n";
outfile.close();
}
}