三维自回避随机游走的死角概率为零?

时间:2019-11-09 21:48:49

标签: java arrays

这是Sedgewick和Wayne的练习1.4.35。

进行实验以验证,对于三维自回避行走,死角概率为0。

enter image description here

这是我的程序:

public class test 
{
    public static void main(String[] args)
    {
        int n = Integer.parseInt(args[0]);
        int trials = Integer.parseInt(args[1]);
        int deadEnds = 0;
        for (int t = 1; t <= trials; t++)
        {
            boolean[][][] a = new boolean[n][n][n];
            int x = n/2, y = n/2, z = n/2;
            while (x > 0 && x < n-1 && y > 0 && y < n-1 && z > 0 && z < n-1)
            {
                a[x][y][z] = true;
                if (a[x+1][y][z] && a[x-1][y][z] && a[x][y+1][z] && a[x][y-1][z] && 
                    a[x][y][z+1] && a[x][y][z-1])
                {
                    deadEnds++;
                    break;
                }
                double r = Math.random();
                if      (r < 1.0/6) {if (!a[x+1][y][z]) x++;}
                else if (r < 2.0/6) {if (!a[x-1][y][z]) x--;}
                else if (r < 3.0/6) {if (!a[x][y+1][z]) y++;}
                else if (r < 4.0/6) {if (!a[x][y-1][z]) y--;}
                else if (r < 5.0/6) {if (!a[x][y][z+1]) z++;}
                else if (r < 1.000) {if (!a[x][y][z-1]) z--;}
            }
        }
        System.out.println((100.0*deadEnds)/trials + "% dead ends.");
    }
}

我的问题是,即使对于100×100×100的晶格,我也不会获得0的概率。我的程序有什么我看不到的问题吗?

以下是在练习中验证上述声明的文字:

enter image description here

谢谢。

0 个答案:

没有答案