Java 随机行走解决方案问题

Java 随机行走解决方案问题,java,random,stddraw,Java,Random,Stddraw,问题 我正在编写一个代码,模拟一只狗在城市里行走——试图逃离城市。狗以相同的概率在每个十字路口随机选择去哪条路。如果卡在死胡同,狗会直接回到大城市的中心,重新开始。这只狗会一次又一次地这样做,直到它离开城市,或者经过多次试验后感到疲劳。但是当狗每次尝试都从中间(N/2,N/2)重新开始时,它将忘记它在上一次尝试中访问过的所有十字路口 创意 我们的想法是模仿教科书中给出的代码并提出解决方案。我们得到了输入N,T-其中N是城市中南北和东西街道的数量,T是狗在放弃之前试图离开城市的次数。我们必须用St

问题

我正在编写一个代码,模拟一只狗在城市里行走——试图逃离城市。狗以相同的概率在每个十字路口随机选择去哪条路。如果卡在死胡同,狗会直接回到大城市的中心,重新开始。这只狗会一次又一次地这样做,直到它离开城市,或者经过多次试验后感到疲劳。但是当狗每次尝试都从中间(N/2,N/2)重新开始时,它将忘记它在上一次尝试中访问过的所有十字路口

创意

我们的想法是模仿教科书中给出的代码并提出解决方案。我们得到了输入N,T-其中N是城市中南北和东西街道的数量,T是狗在放弃之前试图离开城市的次数。我们必须用StdDraw把它画出来。我们已经了解了如何进行随机移动-生成一个介于0和4之间的数字-向上:0右:1向下:2左:3

我的方法

import java.util.Random;
public class RandomWalk {
private static final Random RNG = new Random (Long.getLong ("seed", 
        System.nanoTime())); 
public static void main(String[] args) {
    int N = Integer.parseInt(args[0]);    // lattice size
    int T = Integer.parseInt(args[1]);    // number of trials
    int deadEnds = 0;                     // trials resulting in a dead end

    StdDraw.setCanvasSize();
    StdDraw.setXscale(0,N);
    StdDraw.setYscale(0,N);

    // simulate T self-avoiding walks
    for (int t = 0; t < T; t++) {

        StdDraw.clear();

        StdDraw.setPenRadius(0.002);
        StdDraw.setPenColor(StdDraw.LIGHT_GRAY);

        for(int i=0;i<N;i++){
            StdDraw.line(i, 0, i, N);
            StdDraw.line(0, i, N, i);
        }

        StdDraw.setPenColor(StdDraw.RED);
        StdDraw.setPenRadius(0.01);

        boolean[][] a = new boolean[N][N];   // intersections visited 
        int x = N/2, y = N/2;                // current position



        // repeatedly take a random step, unless you've already escaped
        while (x > 0 && x < N-1 && y > 0 && y < N-1)  {
            int t_x = x;
            int t_y=y;
            // dead-end, so break out of loop
            if (a[x-1][y] && a[x+1][y] && a[x][y-1] && a[x][y+1]) {
                deadEnds++;
                break;
            } 

            // mark (x, y) as visited
            a[x][y] = true; 

            // take a random step to unvisited neighbor
            int r = RNG.nextInt(4);
            if (r ==3) {
                //move left
                if (!a[x-1][y])
                    t_x--;

            }
            else if (r == 1 ) {
                //move right
                if (!a[x+1][y])
                    t_x++;
            }
            else if (r == 2) {
                //move down
                if (!a[x][y-1])
                    t_y--;
            }
            else if (r == 0) {
              //move up
                if (!a[x][y+1])
                    t_y++;
            }

            StdDraw.line(t_x, t_y, x, y);
            x = t_x;
            y = t_y;
        } 
        System.out.println("T: "+t);
    } 
    System.out.println(100*deadEnds/T + "% dead ends");

    }
}
import java.util.Random;
公共课随机化步行{
私有静态最终随机RNG=新随机(Long.getLong(“种子”),
System.nanoTime());
公共静态void main(字符串[]args){
int N=Integer.parseInt(args[0]);//晶格大小
int T=Integer.parseInt(args[1]);//试验次数
int deadEnds=0;//导致死胡同的试验
StdDraw.setCanvasSize();
StdDraw.setXscale(0,N);
标准设定标度(0,N);
//模拟T形自避行走
for(int t=0;t对于(int i=0;i,请使用以下工具检查StdDraw.java:


您的代码应该很好,我得到了预期的结果

请检查StdDraw.java:


你的代码应该很好,我得到了预期的结果应该可以,我得到了:T:6 T:7 T:8 T:9 20%的死胡同应该可以,我得到了:T:6 T:7 T:8 T:9 20%的死胡同你认为问题出在哪里?我确实得到了一些结果,但不是狗出城的结果。可能有什么问题?只是确定一下。预期:当前:你认为是什么问题问题?我确实得到了一些结果,但不是狗出城的结果。可能有什么问题?只是确定一下。预期:当前: