私のプログラムの中で最も重要な部分は、いくつかのオブジェクトで配列を埋めることです。
これらのオブジェクトは、チェス盤上のビショップです。ビショップとそれが攻撃した場所を配置するか、ボードが適切に満たされているかどうかを判断するための代替機能があります。
最初の数回のループが終了すると、ボードはいっぱいになり、次の試行が行われる前の状態に戻ります。
問題は、古い配列ではなく最後の配列を使用しているため、可能なすべてのオプションを作成する代わりに、配列が数字を積み上げ続けることです。私は何を間違っていますか?
編集:結果として、2つはあるべき姿であることに言及する必要があると思います。その後、これはゼロなしでカウントされ、CheckGoedeStand は 1 を返します。
int SolveBoard(int m,int n,int d,int l) {
int[][] field = new int[m][n]; // this is the m*n schaakbord. int is standaard 0.
// probleem opgelost
System.out.println("aantal lopers: " + l);
int GoedeStand = Recursie(field,0,0, m, n, d, l);
PrintFieldImage(field);
return GoedeStand;
}
//deze fuctie is alleen gekoppeld saan SolveBoard()
int Recursie(int[][] field, int LopersSet, int AGB, int m, int n, int d, int l) {
int mcount, ncount;
int[][] fieldC = field;
//de rekenlus
// 0 is leeg, 1 is aangevallen, 2 is lopers plaats, 3 is dame haar plaats
if (LopersSet < l) {
LopersSet++;
for (mcount = 0; mcount < m; mcount++) {
for (ncount = 0; ncount < n; ncount++) {
//if (field[mcount][ncount] <= 1) {
fieldC = PlaatsLoper(fieldC, m, n, mcount, ncount);
//nu de recursie, eerst kopie maken van bord zodat deze niet verloren gaat
AGB = Recursie(fieldC, LopersSet, AGB, m, n, d, l);
//}
}
}
} else {
PrintFieldImage(field);
}
if (CheckGoedeStand(field, m, n) == 1 && LopersSet == l) {
//PrintFieldImage(field);
AGB++;
//field = new int[m][n];
}
return AGB;
}
ご覧のとおり、空の配列から始めます。d は未使用です。テスト用に、m、n、l を 2 に設定しています。
これは私の出力です:
[2, 0]
[0, 1]
[2, 2]
[1, 1]
[2, 2]
[2, 1]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 2]
AGB= 19