ПРОБЛЕМЫRandomWalk выпуск решения
Я работаю на коде, где я имитирующий выгул собака в городе - пытается бежать из города. Собака делает случайный выбор, каким образом идти на каждом перекрестке с равной вероятностью. Если застрял в тупике, собака вернется к середине большого города и начнет все заново. Собака будет делать это снова и снова, пока не выйдет из города, или пока она не устанет после Т-ряда испытаний. Но к тому времени, когда собака начнет снова с середины (N/2, N/2) по каждой попытке, она забудет все пересечения, которые она посетила в предыдущей попытке.
IDEA
Идея заключается в том, чтобы имитировать код, указанный в нашем учебнике, и придумать решение. Нам дали входные данные 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");
}
}
ВОПРОС
Учитывая N - 15, Т - 10, -Dseed = 5463786 мы должны получить результат, как - http://postimg.org/image/s5iekbkpf/
Я в m получение - см. http://postimg.org/image/nxipit0pp/
Я не знаю, где я ошибаюсь. Я знаю, что это очень специфично по своей природе, но я действительно смущен тем, что я делаю неправильно. Я пробовал все 24 перестановки 0,1,2,3, но ни один из них не дал желаемого результата. Итак, я заключаю, что проблема в моем коде.
должен работать, я получил: Т: 6 Т: 7 T : 8 T: 9 20% тупиковые – AlbertFG