这是Sedgewick和Wayne的练习1.4.35。
进行实验以验证,对于三维自回避行走,死角概率为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的概率。我的程序有什么我看不到的问题吗?
以下是在练习中验证上述声明的文字:
谢谢。