Java递归函数,其中包含两个for循环

时间:2013-01-25 18:01:16

标签: java recursion

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

这些物体是国际象棋棋盘上的主教。有一些替代功能可以放置主教和它所攻击的地方,或者决定是否正确填充了主板。

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

问题在于,它不是以旧的数组而是使用最后一个数组,因此数组不断堆积数字而不是制作所有可能的选项。我做错了什么?

修改: 我想我必须提到,结果是两者应该如何。之后,这一个被计算在其中没有零,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

0 个答案:

没有答案