@mk_qwerty

Как применять модель «случайных блужданий без самопересечений» в java?

Доброго времени суток, не могу найти ошибку в программе. Программа в каждом случае выдаёт 0.

Суть задания: программа получает аргументы командной строки n и trials и моделирует случайные блуждания без самопересечений на сетке NxN. Результат вычислений - процент блужданий закончившихся тупиком.

public class selfAvoidingWalk{
  public static void main(String[] args){
    int n = Integer.parseInt(args[0]);
    int trials = Integer.parseInt(args[1]);
    int deadEnds = 0;

    for (int t = 0; t < trials; t++){
      boolean[][] a = new boolean[n][n];
      int x = n/2;
      int y = n/2;

      while ((x > 0) && (x < (n-1)) && (y > 0) && (y > (n-1))){
        a[x][y] = true;

        if (a[x-1][y] && a[x+1][y] && a[x][y-1] && a[x][y+1]){
            deadEnds++;
            break;
        }

        double r = Math.random();
        if (r < 0.25){
          if (!a[x+1][y]) x++;
        }
        else if (r < 0.50){
          if (!a[x-1][y]) x--;
        }
        else if (r < 0.75){
          if (!a[x][y+1]) y++;
        }
        else if (r < 1.00){
          if (!a[x][y-1]) y--;
        }

      }
    }

    //System.out.println(deadEnds);
    System.out.println(100*deadEnds/trials + "% dead ends");
  }
}
  • Вопрос задан
  • 275 просмотров
Решения вопроса 1
myjcom
@myjcom
не могу найти ошибку

Условие в while...
int y = n/2;
... 
&& (y > (n-1))
всегда false.
т.к. (n / 2) <= (n - 1)

Соответственно

Программа в каждом случае выдаёт 0.

int deadEnds = 0;
... 
100*deadEnds/trials == 0
0/n = 0

https://rextester.com/CQOHTE74063
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы