1

在我的程序中,最重要的部分是用一些对象填充数组。

这些对象是棋盘上的象。有一些替代功能可以放置主教和它攻击的地方或决定董事会是否被正确填满。

在前几个循环结束时,电路板被填满并回到之前的状态,完成下一次尝试。

问题在于它以某种方式使用的不是旧数组而是最后一个数组,因此数组不断堆积数字,而不是做出所有可能的选择。我究竟做错了什么?

编辑:我想我不得不提一下,在结果中,两者应该是这样的。之后,这个计数中没有零,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
4

0 回答 0