首页 > 解决方案 > 三维自回避随机游走的死胡同概率为零?

问题描述

这是 Sedgewick & Wayne 练习 1.4.35。

运行实验以验证3 维自动回避行走的死胡同概率为 0。

在此处输入图像描述

这是我的程序:

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。我的程序有什么我看不到的问题吗?

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

在此处输入图像描述

先感谢您。

标签: javaarrays

解决方案


推荐阅读