ソフトウェア工学の実践第3の動作
GitHubの住所:https://github.com/Yuqiancha919/061700232
PSPテーブル
PSP2.1 | パーソナルソフトウェアプロセス段階 | 推定時間がかかる(分) | 実際の時間がかかる(分) |
---|---|---|---|
プランニング | 計画 | 120 | 120 |
推計 | このタスクが必要とどのくらいの時間を見積もります | 3600 | 7200 |
開発 | 開発 | 60 | 60 |
分析 | (新しい技術を学ぶ含む)ニーズ分析 | 60 | 120 |
デザインスペック | 設計ドキュメントの生成 | 30 | 30 |
デザインレビュー | デザインレビュー | 60 | 30 |
標準コーディング | コードの仕様(現在の開発のための適切な規範の開発) | 60 | 60 |
設計 | 具体的な設計 | 120 | 120 |
コーディング | 具体的なコーディング | 120 | 180 |
コードレビュー | コードレビュー | 120 | 120 |
テスト | 検査(セルフテスト、コードを変更し、変更を提出) | 120 | 180 |
報告 | レポート | 120 | 150 |
テストrepor | テストレポート | 30 | 60 |
サイズ測定 | コンピューティングのワークロード | 30 | 30 |
死後&プロセス改善計画 | その後まとめ、およびプロセス改善計画 | 60 | 120 |
トータル | 3600 | 9600 |
レビューのタイトル
数独は、各宮殿が9つの小さなセルに分割され、ディスク9つの宮殿です。デジタル知られており、論理および推論を使用して、この八十から一グリッドを解決する特定の条件を考えると、他の空間に番号1-9を入力します。1-9ので、各番号は、としても知られている各行、各列および各宮殿、一度だけ表示されていることを「正方形」。!
今、私たちはJiugonggeに3つのグリッドからの高度な完全なステップバイステップで、行きたい、でも主要評価した後、他の事業者は、アップグレード、3つのグリッドのブログや他のタスクを完了すること。次のように詳細な各順序ルールは以下のとおりです。
三つのグリッド:ディスク3 3 1-3ので、各番号に関係なく宮殿の各行、各列に一度だけ表示されていること;
4つのグリッド:ディスク2 2 4パレス、すべての家に分割2個の四つの小細胞。1-4の各番号は、各行、各列および各宮殿に一度だけ表示され、
5つのグリッド:ディスク5 5 1-5ので、各番号は、各行に一度だけ表示されていること、各列は、関係なく、宮殿、
宮殿グリッド:ディスク2 3シックスPalaceは、各家は3個の分割された 2 6小細胞。1-6各数値は、各列および各宮殿、一度だけそれぞれの行に表示され、
7つの宮殿グリッド:ディスク7 7 1-7ので、各番号に関係なく宮殿の各行、各列に一度だけ表示されていること;
8つのグリッド:ディスク4 2 8家、すべての家に分け4個の8小細胞。各番号は一度だけ、各行、各列、各宮殿で1-8と表示されるように、
正方形を:ディスクが3である 3 9宮殿、すべての家は9つの小さな3x3のグリッドに分割されています。1-9ので、各番号は、各行、各列および各宮殿に一度だけ発生します。
考え
この質問は、ちょうど時間の感覚が困難で見始めて、その後数日を遅らせています。あなたが見つけたときの時間が長時間となっている、と私は座って、慎重に考えました。今、おそらく私はまだ私のアプローチに戻って考えて非常に良い感じ、行っています。
私の考えは、数字を埋めることができ、全体のxグリッドが一つずつ、3次元配列の定義をチェックした上でつまり、第1の2次元Xはディスクのグリッドを維持するために使用され、三次元がグリッドを維持するために使用され、非常に簡単です。それぞれのチェックのために、行と列だけでなく、数字が現れた小さなグリッドのこのグリッドをチェックし、それがマークされています。最後に、一つだけの数がグリッドを埋めるために、直接にマークされていないグリッドを確認してください。そして、上記の動作を繰り返します。グリッドが0でない場合は停止し、出力されます。
私は後で気づいた時には、問題を発見しました。データグリッドで満たされたいくつかの比較的小さな始まりのために、このアプローチは、おそらく完全な方法はありません。その後、私はインターネットを介して学習し、グリッドのすべての可能な数を試して、再帰的なアプローチを学び、あなたはには、正常に完了しようとすることができ、に戻りしようとする試みが失敗しました。
コードの実装
これは、達成するためのコードです。
void inti()
{
int i, j, k;
int cnt = 0;
for (i = 1; i < N; i++)
for (j = 1; j < N; j++)
{
if (sudu[i][j][0] == 0)
{
for (k = 1; k < N; k++)
{
if (sudu[i][k][0] != 0)
sudu[i][j][sudu[i][k][0]] = 0;
}
for (k = 1; k < N; k++)
{
if (sudu[k][j][0] != 0)
sudu[i][j][sudu[k][j][0]] = 0;
}
if (N == 5 || N == 7 || N == 9 || N == 10)
{
if (N == 10)
ninesudu(i, j);
if (N == 9)
eightsudu(i, j);
if (N == 7)
sixsudu(i, j);
if (N == 5)
foursudu(i, j);
}
for (k = 1; k < N; k++)
{
if (sudu[i][j][k] != 0)
cnt++;
}
if (cnt == 1)
{
for (k = 1; k < 10; k++)
{
if (sudu[i][j][k] != 0)
{
sudu[i][j][0] = k;
break;
}
}
}
}
cnt = 0;
}
}
アカウントにすべてのグリッドを撮影
//九宫格
void ninesudu(int i, int j)
{
int m, n;
if (i <= 3)
{
if (j <= 3)
{
for (m = 1; m < 4; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 1; m < 4; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 9)
{
for (m = 1; m < 4; m++)
for (n = 7; n < 10; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 6)
{
if (j <= 3)
{
for (m = 4; m < 7; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 4; m < 7; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 9)
{
for (m = 4; m < 7; m++)
for (n = 7; n < 10; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 9)
{
if (j <= 3)
{
for (m = 7; m < 10; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 7; m < 10; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 9)
{
for (m = 7; m < 10; m++)
for (n = 7; n < 10; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
}
//八宫格
void eightsudu(int i, int j)
{
int m, n;
if (i <= 4)
{
if (j <= 2)
{
for (m = 1; m < 5; m++)
for (n = 1; n < 3; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 4)
{
for (m = 1; m < 5; m++)
for (n = 3; n < 5; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 1; m < 5; m++)
for (n = 5; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 8)
{
for (m = 1; m < 5; m++)
for (n = 7; n < 9; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 8)
{
if (j <= 2)
{
for (m = 5; m < 9; m++)
for (n = 1; n < 3; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 4)
{
for (m = 5; m < 9; m++)
for (n = 3; n < 5; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 5; m < 9; m++)
for (n = 5; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 8)
{
for (m = 5; m < 9; m++)
for (n = 7; n < 9; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
}
//六宫格
void sixsudu(int i, int j)
{
int m, n;
if (i <= 2)
{
if (j <= 3)
{
for (m = 1; m < 3; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 1; m < 3; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 4)
{
if (j <= 3)
{
for (m = 3; m < 5; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 3; m < 5; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 6)
{
if (j <= 3)
{
for (m = 5; m < 7; m++)
for (n = 1; n < 4; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 6)
{
for (m = 5; m < 7; m++)
for (n = 4; n < 7; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
}
//四宫格
void foursudu(int i, int j)
{
int m, n;
if (i <= 2)
{
if (j <= 2)
{
for (m = 1; m < 3; m++)
for (n = 1; n < 3; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 4)
{
for (m = 1; m < 3; m++)
for (n = 3; n < 5; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
else if (i <= 4)
{
if (j <= 2)
{
for (m = 3; m < 5; m++)
for (n = 1; n < 3; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
else if (j <= 4)
{
for (m = 3; m < 5; m++)
for (n = 3; n < 5; n++)
{
if (sudu[m][n][0] != 0)
sudu[i][j][sudu[m][n][0]] = 0;
}
}
}
}
主な機能
int main(int argc, char *argv[])
{
int i, n, j, k;
int id = 0;
ifstream ifp;
ofstream ofp;
N = atoi(argv[2]);
N = N + 1;
n = atoi(argv[4]);
ifp.open(argv[6]);
if (!ifp.is_open())//判断文件是否成功打开
cout << "File open failed" << endl;
ofp.open(argv[8]);
if (!ofp.is_open())
cout << "File open failed" << endl;
int count = 0;
while (n--)
{
for (i = 1; i < N; i++)
for (j = 1; j < N; j++)
//cin >> sudu[i][j][0];
ifp >> sudu[i][j][0];
for (i = 1; i < N; i++)
for (j = 1; j < N; j++)
for (k = 1; k < 10; k++)
sudu[i][j][k] = 1;
inti();
//cout << endl;
ofp << endl;
int q = 5;
while (q--)
{
for (i = 1; i < N; i++)
{
for (j = 1; j < N; j++)
if (sudu[i][j][0] == 0)
inti();
}
for (i = 1; i < N; i++)
for (j = 1; j < N; j++)
if (sudu[i][j][0] == 0)
count++;
if (count == 0)
break;
count = 0;
}
for (i = 1; i < N; i++)
for (j = 1; j < N; j++)
{
if (sudu[i][j][0] == 0)
id++;
}
if(id!=0)
solve(id);
for (i = 1; i < N; i++)
{
for (j = 1; j < N; j++)
{
//cout << sudu[i][j][0] << ' ';
ofp << sudu[i][j][0] << ' ';
}
//cout << endl;
ofp << endl;
}
}
return 0;
}
その後改善が再帰を追加しました
void fill(int number, int i, int j) {
for (int k = 1; k < N; k++) {
sudu[i][k][number]++;
sudu[k][j][number]++;
}
/*for (int n = 0; n < 3; n++) {
for (int m = 0; m < 3; m++) {
sudu[i / 3 * 3 + n][j / 3 * 3 + m][number]++;
}
}*/
}
void reset(int number, int i, int j) {
for (int k = 1; k < N; k++) {
sudu[i][k][number]--;
sudu[k][j][number]--;
}
/*for (int n = 0; n < 3; n++) {
for (int m = 0; m < 3; m++) {
sudu[i / 3 * 3 + n][j / 3 * 3 + m][number]--;
}
}*/
}
void solve(int id)
{
if (id == 0)
return;
for (int i = 1; i < N; i++)
{
for (int j = 1; j < N; j++)
{
if (sudu[i][j][0] == 0)
{
for (int number = 1; number < 10; number++)
{
if (sudu[i][j][number] == 0)
{
number(number, i, j);
sudu[i][j][0] = number;
solve(id - 1);
sudu[i][j][0] = 0;
number(number, i, j);
er(number, i, j);
}
}
return;
}
}
}
}
結果
ように!七十八グリッドは現在、小さな問題が解決するのは難しいですがあり...
性能解析
そして私は... 55(脂身を使用する方法を知って取得していない
、それはOKになります
概要
私はあまりにも料理した、555あまりにも困難であると言いたいです。
全体的に私は本当に私のために、新しいもの、学んだ学びました。私の心はまだ満足してい、私は確かにこの問題が出てきませんし、今ではおそらく大丈夫行われ、最初から戻って考えてみてください。しかし、私は特に私が現在時刻に数日のために恐れていたこの時のように、恐れてか、それを後で問題になることはありません、まだ十分な何かのあまりされていませんでした。
特定の給油後!