在我的程序中,最重要的部分是用一些对象填充数组。
这些物体是国际象棋棋盘上的主教。有一些替代功能可以放置主教和它所攻击的地方,或者决定是否正确填充了主板。
在前几个循环结束时,电路板被填充并回到之前的状态,下一次尝试完成。
问题在于,它不是以旧的数组而是使用最后一个数组,因此数组不断堆积数字而不是制作所有可能的选项。我做错了什么?
修改: 我想我必须提到,结果是两者应该如何。之后,这一个被计算在其中没有零,CheckGoedeStand返回一个。
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