es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rellene los valores adyacentes al límite mediante inundación.

Estoy tratando de crear un algoritmo donde pueda obtener los valores adyacentes a un flood fill. Suponiendo que tengo la siguiente matriz 2D:

Necesito poder agregar los valores en amarillo, que son el límite del flood fill. Hasta ahora logré hacer un flood fill, que no es realmente el ámbito de mi ejercicio, pero es un punto de partida. ¿Alguna idea de cómo puedo obtener los valores límite? Aquí está el código que tengo hasta ahora:

// Programa Java para implementar el algoritmo de relleno
clase GFG
{

// Dimensiones de la pantalla de pintura
static int M = 8;
static int N = 8;

// Una función recursiva para reemplazar el color anterior 'prevC' en '(x, y)'
// y todos los píxeles circundantes de (x, y) con nuevo color 'newC' y
static void floodFillUtil(int screen[][], int x, int y,
                                    int prevC, int newC)
{
    // Casos base
    si (x < 0 || x > = M || y < 0 || y > = N)
        volver;
            si (pantalla[x][y]! = prevC) {
        volver;
    }
    // Reemplazar el color en (x, y)
    pantalla[x][y] = newC;

    // Recurrir para norte, este, sur y oeste
    floodFillUtil(pantalla, x + 1, y, prevC, newC);
    floodFillUtil(pantalla, x-1, y, prevC, newC);
    floodFillUtil(pantalla, x, y + 1, prevC, newC);
    floodFillUtil(pantalla, x, y-1, prevC, newC);

}

// Principalmente encuentra el color anterior en (x, y) y
// llama a floodFillUtil ()
static void floodFill(int screen[][], int x, int y, int newC)
{
    int prevC = pantalla[x][y];
    if (prevC == newC) regreso;
    floodFillUtil(pantalla, x, y, prevC, newC);
}

// Código del controlador
público estático vacío principal(String[] args)
{
    int screen [] [] = {{1, 1, 1, 1, 1, 1, 1, 1},
                    {1, 1, 1, 1, 1, 1, 0, 0},
                    {1, 0, 0, 1, 1, 0, 1, 1},
                    {1, 2, 2, 2, 2, 0, 1, 0},
                    {1, 1, 2, 2, 2, 0, 1, 0},
                    {1, 1, 1, 2, 2, 2, 2, 0},
                    {1, 1, 1, 1, 1, 2, 1, 1},
                    {1, 1, 1, 1, 1, 2, 2, 1},
                    };
    int x = 4, y = 4, newC = 3;
    floodFill(screen, x, y, newC);

    System.out.println("Pantalla actualizada después de la llamada a floodFill: ");
    para (int i = 0; i < M; i++)
    {
        para (int j = 0; j < N; j++)
        System.out.print(screen[i][j] + " ");
        System.out.println();
    }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando implementar un algoritmo de relleno de inundación. Para obtener los valores límite, puedes usar un bucle para iterar a través del array y verificar cualquier valor que sea diferente del valor original. Si el valor es diferente, entonces forma parte del límite. Puedes agregar los valores límite a una lista o array.

    ¡Espero que esto sea de ayuda!

Comments are closed.