За последние 24 часа нас посетили 20167 программистов и 1081 робот. Сейчас ищут 756 программистов ...

Нехватка памяти из-за рекурсии

Тема в разделе "PHP для новичков", создана пользователем DaniLweb, 3 апр 2020.

  1. DaniLweb

    DaniLweb Активный пользователь

    С нами с:
    6 сен 2014
    Сообщения:
    38
    Симпатии:
    0
    Добрый день! Пытаюсь применить алгоритм dfs (поиск в глубину) для того чтобы решить след. задачу:
    Из листа клетчатой бумаги размером m * N клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа?

    Сам код:

    PHP:
    1. <?php
    2. /* 1 0 0 0
    3.    0 1 0 0
    4.    1 0 0 0
    5.    0 0 0 1
    6. */
    7. $m = 4; $n = 4;
    8.  
    9. function chest(&$arr, $x, $y){
    10.         $arr[$x][$y] == 1;
    11.         if ((isset($arr[$x][$y+1])) and ($arr[$x][$y+1] != 1)) chest($arr, $x, $y+1);
    12.         if ((isset($arr[$x+1][$y])) and ($arr[$x+1][$y] != 1)) chest($arr, $x+1, $y);
    13.         if ((isset($arr[$x][$y-1])) and ($arr[$x][$y-1] != 1)) chest($arr, $x, $y-1);
    14.         if ((isset($arr[$x-1][$y])) and ($arr[$x-1][$y] != 1)) chest($arr, $x-1, $y);
    15. }
    16.  
    17.  
    18. $mas = [array(0,1,0,0),
    19.         array(1,1,1,1),
    20.         array(1,0,1,1),
    21.         array(1,1,1,0)];
    22.  
    23. $counter = 0;
    24. for ($x = 0; $x < $m; $x++){
    25.     for ($y = 0; $y < $n; $y++){
    26.         if ($mas[$x][$y] != 1){
    27.             chest($mas, $x, $y);
    28.             ++$counter;
    29.         }
    30.     }
    31. }
    32.  
    33. echo $counter;
    Но проблема в том, что при попытке выполнения скрипта возникает ошибка: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 262144 bytes). Кто может подсказать как исправить ошибку или сам скрипт ?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    PHP:
    1. /* 1 0 0 0
    2.    0 1 0 0
    3.    1 0 0 0
    4.    0 0 0 1
    5. */
    6.  
    7. -----
    8.  
    9.  
    10. $mas = [array(0,1,0,0),
    11.         array(1,1,1,1),
    12.         array(1,0,1,1),
    13.         array(1,1,1,0)];
    Теперь объясни
     
  3. DaniLweb

    DaniLweb Активный пользователь

    С нами с:
    6 сен 2014
    Сообщения:
    38
    Симпатии:
    0
    на комментарии можно не обращать внимания они лишние
     
  4. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    10 строка $arr[$x][$y]==1;
     
    DaniLweb нравится это.
  5. DaniLweb

    DaniLweb Активный пользователь

    С нами с:
    6 сен 2014
    Сообщения:
    38
    Симпатии:
    0
    Спасибо тебе огромное выручил )