You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
3.6 KiB
Java

5 years ago
/*This is a Java Program to Implement Flood Fill Algorithm. Flood fill, also called seed fill, is an algorithm that determines the area connected to a given node in a multi-dimensional array. It is used in the “bucket” fill tool of paint programs to fill connected, similarly-colored areas with a different color, and in games such as Go and Minesweeper for determining which pieces are cleared. When applied on an image to fill a particular bounded area with color, it is also known as boundary fill. Here P is for passage, O for obstacle and W for water flow.*/
/**
* Java Program to Implement Flood Fill Algorithm
**/
import java.util.Scanner;
import java.util.Arrays;
/** Class FloodFill **/
public class FloodFill
{
/** Function to fill grid **/
private void fillGrid(char[][] arr, int r, int c)
{
if (arr[r][c] == 'P')
{
arr[r][c] = 'W';
display(arr);
fillGrid(arr, r + 1, c);
fillGrid(arr, r - 1, c);
fillGrid(arr, r, c + 1);
fillGrid(arr, r, c - 1);
}
}
/** Function to display grid **/
private void display(char[][] arr)
{
System.out.println("\nGrid : ");
for (int i = 1; i < arr.length - 1; i++)
{
for (int j = 1; j < arr[i].length - 1; j++)
System.out.print(arr[i][j] +" ");
System.out.println();
}
}
/** Main method **/
public static void main(String[] args)
{
Scanner scan = new Scanner( System.in );
System.out.println("Flood Fill Test\n");
/** Accept dimensions **/
System.out.println("Enter dimensions of grid");
int M = scan.nextInt();
int N = scan.nextInt();
/** make grid with border as obstacle to avoid boundary conditions **/
char[][] arr = new char[M + 2][N + 2];
for (int i = 0; i < M + 2; i++)
Arrays.fill(arr[i], 'O');
/** Accept grid **/
System.out.println("Enter grid with 'P' for passage and 'O' for obstacle");
for (int i = 1; i < M + 1; i++)
for (int j = 1; j < N + 1; j++)
arr[i][j] = scan.next().charAt(0);
System.out.println("Enter coordinates to start ");
int sr = scan.nextInt();
int sc = scan.nextInt();
if (arr[sr][sc] != 'P')
{
System.out.println("Invalid coordinates");
System.exit(0);
}
FloodFill ff = new FloodFill();
ff.fillGrid(arr, sr, sc);
}
}
/*
Enter dimensions of grid
5 5
Enter grid with 'P' for passage and 'O' for obstacle
P P P P P
O P O P O
O O P P O
P P P O O
P O O O O
Enter coordinates to start
3 3
Grid :
P P P P P
O P O P O
O O W P O
P P P O O
P O O O O
Grid :
P P P P P
O P O P O
O O W P O
P P W O O
P O O O O
Grid :
P P P P P
O P O P O
O O W P O
P W W O O
P O O O O
Grid :
P P P P P
O P O P O
O O W P O
W W W O O
P O O O O
Grid :
P P P P P
O P O P O
O O W P O
W W W O O
W O O O O
Grid :
P P P P P
O P O P O
O O W W O
W W W O O
W O O O O
Grid :
P P P P P
O P O W O
O O W W O
W W W O O
W O O O O
Grid :
P P P W P
O P O W O
O O W W O
W W W O O
W O O O O
Grid :
P P P W W
O P O W O
O O W W O
W W W O O
W O O O O
Grid :
P P W W W
O P O W O
O O W W O
W W W O O
W O O O O
Grid :
P W W W W
O P O W O
O O W W O
W W W O O
W O O O O
Grid :
P W W W W
O W O W O
O O W W O
W W W O O
W O O O O
Grid :
W W W W W
O W O W O
O O W W O
W W W O O
W O O O O