* fix: replace sh with shell fix replace terminal with shell fix replace node with js fix replace output with shell fix replace cs with csharp fix replace c++ with cpp fix replace c# with csharp fix replace javasctipt with js fix replace syntax with js fix replace unix with shell fix replace linux with shell fix replace java 8 with java fix replace swift4 with swift fix replace react.js with jsx fix replace javascriot with js fix replace javacsript with js fix replace c++ - with cpp fix: corrected various typos fix: replace Algorithm with nothing fix: replace xaml with xml fix: replace solidity with nothing fix: replace c++ with cpp fix: replace txt with shell fix: replace code with json and css fix: replace console with shell
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Flood Fill Algorithm
 | |
| localeTitle: Algoritmo de relleno de inundación
 | |
| ---
 | |
| ## Algoritmo de relleno de inundación
 | |
| 
 | |
| El relleno de inundación es un algoritmo utilizado principalmente para determinar un área limitada conectada a un nodo determinado en una matriz multidimensional. Es un parecido cercano a la herramienta de cubeta en programas de pintura.
 | |
| 
 | |
| La implementación más aproximada del algoritmo es una función recursiva basada en pila, y de eso vamos a hablar siguiente.
 | |
| 
 | |
| ### ¿Como funciona?
 | |
| 
 | |
| El problema es bastante simple y generalmente sigue estos pasos:
 | |
| 
 | |
| 1.  Tomar la posición del punto de partida.
 | |
| 2.  Decida si desea ir en 4 direcciones ( **N, S, W, E** ) u 8 direcciones ( **N, S, W, E, NW, NE, SW, SE** ).
 | |
| 3.  Elija un color de reemplazo y un color de destino.
 | |
| 4.  Viaja en esas direcciones.
 | |
| 5.  Si la ficha en la que caes es un objetivo, reaplícala con el color elegido.
 | |
| 6.  Repita 4 y 5 hasta que haya estado en todas partes dentro de los límites.
 | |
| 
 | |
| Tomemos como ejemplo la siguiente matriz:
 | |
| 
 | |
| 
 | |
| 
 | |
| El cuadrado rojo es el punto de partida y los cuadrados grises son los llamados muros.
 | |
| 
 | |
| Para más detalles, aquí hay un código que describe la función:
 | |
| 
 | |
| ```cpp
 | |
| int wall = -1; 
 | |
|  
 | |
|  void flood_fill(int pos_x, int pos_y, int target_color, int color) 
 | |
|  { 
 | |
|  
 | |
|    if(a[pos_x][pos_y] == wall || a[pos_x][pos_y] == color) // if there is no wall or if i haven't been there 
 | |
|       return;                                              // already go back 
 | |
|  
 | |
|    if(a[pos_x][pos_y] != target_color) // if it's not color go back 
 | |
|       return; 
 | |
|  
 | |
|    a[pos_x][pos_y] = color; // mark the point so that I know if I passed through it. 
 | |
|  
 | |
|    flood_fill(pos_x + 1, pos_y, color);  // then i can either go south 
 | |
|    flood_fill(pos_x - 1, pos_y, color);  // or north 
 | |
|    flood_fill(pos_x, pos_y + 1, color);  // or east 
 | |
|    flood_fill(pos_x, pos_y - 1, color);  // or west 
 | |
|  
 | |
|    return; 
 | |
|  
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| Como se ve arriba, mi punto de partida es (4,4). Después de llamar a la función para las coordenadas de inicio **x = 4** e **y = 4** , Puedo comenzar a verificar si no hay pared o color en el lugar. Si eso es válido, señalo el lugar con un **"color"** y comienza a revisar los otros cuadrados adiacentes.
 | |
| 
 | |
| Hacia el sur llegaremos al punto (5,4) y la función se ejecutará de nuevo.
 | |
| 
 | |
| ### Problema de ejercicio
 | |
| 
 | |
| Siempre consideré que resolver un (o más) problema (s) usando un algoritmo recién aprendido es la mejor manera de entenderlo. el concepto.
 | |
| 
 | |
| Así que aquí está uno:
 | |
| 
 | |
| **Declaración:**
 | |
| 
 | |
| En una matriz bidimensional se le da un número n de **"islas"** . Intenta encontrar el área más grande de una isla y El número de la isla correspondiente. 0 marcas de agua y cualquier otra x entre 1 y n marca una casilla de la superficie correspondiente a la isla x.
 | |
| 
 | |
| **Entrada**
 | |
| 
 | |
| *   **n** - el número de islas.
 | |
| *   **l, c** - las dimensiones de la matriz.
 | |
| *   los próximos **l** líneas, números **c** dando el **l** º fila de la matriz.
 | |
| 
 | |
| **Salida**
 | |
| 
 | |
| *   **i** - el número de la isla con el área más grande.
 | |
| *   **A** - el área de la isla **i** '.
 | |
| 
 | |
| **Ex:**
 | |
| 
 | |
| Tienes la siguiente entrada:
 | |
| 
 | |
| ```cpp
 | |
| 2 4 4 
 | |
|  0 0 0 1 
 | |
|  0 0 1 1 
 | |
|  0 0 0 2 
 | |
|  2 2 2 2 
 | |
| ```
 | |
| 
 | |
| Por lo que obtendrá la isla no. 2 como la isla más grande con el área de 5 plazas.
 | |
| 
 | |
| ### Consejos
 | |
| 
 | |
| El problema es bastante fácil, pero aquí hay algunos consejos:
 | |
| ```
 | |
| 1. Use the flood-fill algorithm whenever you encounter a new island. 
 | |
|  2. As opposed to the sample code, you should go through the area of the island and not on the ocean (0 tiles). 
 | |
| 
 | |
| ``` |