Пробегать прилегающие положения массива

Я реализую игру, которую это считает целью наполнять все поля ввода того же цвета (в этом случае числа будут цветами, выбранный пользователем, который будет играть, и в массиве с размерами 9x9). Случай состоит в том, что уже я имею реализованный, как произвождение вышеупомянутого случайного массива:

public static void generar (int tamano , int colores, int tablero [][]){
     for(int i=0; i<tamano; i++) {
         for(int j=0; j<tamano; j++) {          // recorro la matriz
              tablero[i][j]=(int)Math.floor(Math.random()*colores);
         }
     }

}

Как только был создан массив, требуется цвет и следовательно, если это тот же самый, что в том этой будки ничего не делает, если он отличается, он сменит стоимость на принятый в доме и одновременно смотри Вашу близость, чтобы знать, была ли у них та же начальная стоимость этим обмениваться из-за отборного цвета. Следовательно, если изменился цвет в вышеупомянутом прилегании, подтверждать также Ваш respetivas близость. Я имею инициализировавший в положении (x, y) = (1,1), который в той, которая приказывает начинаться и следовательно пользователь не вводит положение в котором играть.

public static void jugada (int tablero[][], int color,int tamano ,int colores){ 
    int x= 1 ; int y = 1 ;      
        if (tablero [x][y] == color){
            tablero [x][y] = color ;

        }
        else{ 
            if (tablero [x][y] != color) {
            adyacentes (tablero, color, x , y);
            tablero [x][y] = color ;

        }
    }
}

public static void adyacentes (int tablero [][] , int color, int x , int y){

    if (tablero [x+1][y] == color){
        tablero [x+1][y] = color ;
    }
    else if (tablero [x+1][y] == tablero[x][y]){
        tablero [x+1][y] = color ;

    }
    if (tablero [x-1][y] == color){
        tablero [x-1][y] = color ;
    }
    else    if (tablero [x-1][y] == tablero[x][y]){
        tablero [x-1][y] = color ;

    }
    if (tablero [x][y+1] == color){
        tablero [x][y+1] = color ;
    }
    else    if (tablero [x][y+1] == tablero[x][y]){
        tablero [x][y+1] = color ;
    }

    if (tablero [x][y-1] == color){
        tablero [x][y-1] = color ;
    }
    else if (tablero [x][y-1] == tablero[x][y]){
        tablero [x][y-1] = color ;
}

Моя проблема приходит во время пробегания прилегающих будок, из-за логического вывода я знаю, что я должен пробегать массив с циклом, но мои результаты не ожидаемые. Кто-то мог бы говорить мне, как был бы сказан код для того, чтобы посмотрите, во время Ваша соответствующая близость измените стоимость на прилегание?

3
задан 04.01.2017, 19:39
0 ответов

То, что ты хочешь сделать, является наполненным наводнением прилеганием в 4 адресах.
introducir la descripción de la imagen aquí

Ввиду координат (в иллюстрации это центр) и цвет (апельсин в иллюстрации) ты хочешь наполнить этим цветом все точки первоначального цвета (мишень в иллюстрации), что были прилегающими.

Типичный алгоритм, чтобы это делать, - в перекурсивной форме. Метод jugada только подтверди, считает ли точка информация цвет, отличный от прошлого параметром; если это не так, не надо ничего не делать. Если такое пламя в pintarRecursivo что делает всю работу.

  public static void jugada (int tablero[][], int color,int tamano ,int colores){ 
    int x= 1 ; int y = 1 ;      
    if (tablero [x][y] != color) {
      int colorARellenar = tablero[x][y];
      pintarRecursivo (tablero, color, colorARellenar, x , y);
    } 
  }

pintarRecursivo подтверди, находится ли он в точке с цветом, который совпадает с colorARellenar, если это так, он меняет ему цвет и звонит recursivamente для 4 прилегающих координат. Подтверждая прежде чем мы не вытекаем из array.

  public static void pintarRecursivo (int tablero [][] , int color, int colorARellenar, int x , int y){
    if ( x<0 || y<0 || x>=tablero.length || y>=tablero[x].length )
      return;
    if ( tablero[x][y]!=colorARellenar )
      return;
    tablero[x][y] = color;
    pintarRecursivo( tablero, color, colorARellenar, x+1, y);
    pintarRecursivo( tablero, color, colorARellenar, x, y+1);
    pintarRecursivo( tablero, color, colorARellenar, x-1, y);
    pintarRecursivo( tablero, color, colorARellenar, x, y-1);
  }
4
ответ дан 03.12.2019, 17:53