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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*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