Flood fill Algorithm
Here given code implementation process.
/*
C program
Flood fill Algorithm
*/
#include <stdio.h>
#define R 7
#define C 6
//Displaying of the matrix elements
void printMatrix(int matrix[R][C])
{
int i=0;
int j=0;
for (i = 0; i < R; ++i)
{
for (j = 0; j < C; ++j)
{
printf(" %d", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
//This is Recursively change the old color to new color of a given grid location
void floodFill(int x, int y,int color,int oldColor, int matrix[R][C])
{
if(x>=R || y >= C || y < 0 || x < 0)
{
// When size are not valid to given matrix
return;
}
if(matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
floodFill(x+1,y,color,oldColor,matrix);
floodFill(x,y+1,color,oldColor,matrix);
floodFill(x-1,y,color,oldColor,matrix);
floodFill(x,y-1,color,oldColor,matrix);
}
}
// Handles the request to perform fill color operation
void fillColor(int x, int y,int color, int matrix[R][C])
{
if(x>=R || y >= C || y < 0 || x < 0)
{
printf("\n Invalid Position (%d , %d)",x,y);
return;
}
printf("\n Before fill color %d in Start (%d , %d) Location\n",color,x,y);
printMatrix(matrix);
floodFill(x,y,color,matrix[x][y],matrix);
printf("\n After fill color %d in Start (%d , %d) Location \n",color,x,y);
printMatrix(matrix);
}
int main()
{
// Define matrix of an integer elements
int matrix[R][C] =
{
{9, 9, 9 , 9, 9, 9 },
{9, 1, 9 , 2, 6, 9 },
{1, 1, 9 , 2, 9, 9 },
{1, 1, 1 , 2, 9, 9 },
{1, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 2, 2 }
};
// Location
int x = 1;
int y = 2;
int color = 4;
fillColor(x,y,color,matrix);
return 0;
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
/*
Java Program
Flood fill Algorithm
*/
public class MyMatrix
{
//Displaying of the matrix elements
public void printMatrix(int[][] matrix, int rows, int cols)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; ++i)
{
for (j = 0; j < cols; ++j)
{
System.out.print(" " + matrix[i][j]);
}
System.out.print("\n");
}
System.out.print("\n");
}
//This is Recursively change the old color to new color of a given grid location
public void floodFill(int x, int y, int color, int oldColor, int[][] matrix, int rows, int cols)
{
if (x >= rows || y >= cols || y < 0 || x < 0)
{
// When size are not valid to given matrix
return;
}
if (matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
floodFill(x + 1, y, color, oldColor, matrix, rows,cols);
floodFill(x, y + 1, color, oldColor, matrix, rows,cols);
floodFill(x - 1, y, color, oldColor, matrix, rows,cols);
floodFill(x, y - 1, color, oldColor, matrix, rows,cols);
}
}
// Handles the request to perform fill color operation
public void fillColor(int x, int y, int color, int[][] matrix)
{
// Get the size
int rows = matrix.length;
int cols = matrix[0].length;
if (y < 0 || x < 0 || x >= rows || y >= cols)
{
System.out.print("\n Invalid Position (" + x + " , " + y + ")");
return;
}
System.out.print("\n Before fill color " + color + " in Start (" + x + " , " + y + ") Location\n");
printMatrix(matrix, rows, cols);
floodFill(x, y, color, matrix[x][y], matrix, rows, cols);
System.out.print("\n After fill color " + color + " in Start (" + x + " , " + y + ") Location \n");
printMatrix(matrix, rows, cols);
}
public static void main(String[] args)
{
MyMatrix obj = new MyMatrix();
int [][]matrix =
{
{9, 9, 9 , 9, 9, 9 },
{9, 1, 9 , 2, 6, 9 },
{1, 1, 9 , 2, 9, 9 },
{1, 1, 1 , 2, 9, 9 },
{1, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 2, 2 }
};
// Location
int x = 1;
int y = 2;
// new color
int color = 4;
obj.fillColor(x, y, color, matrix);
}
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
// Include header file
#include <iostream>
#define R 7
#define C 6
using namespace std;
/*
C++ Program
Flood fill Algorithm
*/
class MyMatrix
{
public:
// Displaying of the matrix elements
void printMatrix(int matrix[R][C])
{
int i = 0;
int j = 0;
for (i = 0; i < R; ++i)
{
for (j = 0; j < C; ++j)
{
cout << " " << matrix[i][j];
}
cout << "\n";
}
cout << "\n";
}
// This is Recursively change the old color to new color of a given grid location
void floodFill(int x, int y, int color, int oldColor, int matrix[R][C])
{
// When size are not valid to given matrix
if (x >= R || y >= C || y < 0 || x < 0)
{
return;
}
if (matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
this->floodFill(x + 1, y, color, oldColor, matrix);
this->floodFill(x, y + 1, color, oldColor, matrix);
this->floodFill(x - 1, y, color, oldColor, matrix);
this->floodFill(x, y - 1, color, oldColor, matrix);
}
}
// Handles the request to perform fill color operation
void fillColor(int x, int y, int color, int matrix[R][C])
{
if (y < 0 || x < 0 || x >= R || y >= C)
{
cout << "\n Invalid Position (" << x << " , " << y << ")";
return;
}
cout << "\n Before fill color " << color << " in Start (" << x << " , " << y << ") Location\n";
this->printMatrix(matrix);
this->floodFill(x, y, color, matrix[x][y], matrix);
cout << "\n After fill color " << color << " in Start (" << x << " , " << y << ") Location \n";
this->printMatrix(matrix);
}
};
int main()
{
MyMatrix obj = MyMatrix();
int matrix[R][C] =
{
{9, 9, 9 , 9, 9, 9 },
{9, 1, 9 , 2, 6, 9 },
{1, 1, 9 , 2, 9, 9 },
{1, 1, 1 , 2, 9, 9 },
{1, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 2, 2 }
};
// Location
int x = 1;
int y = 2;
// new color
int color = 4;
obj.fillColor(x, y, color, matrix);
return 0;
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
// Include namespace system
using System;
/*
C# Program
Flood fill Algorithm
*/
public class MyMatrix
{
// Displaying of the matrix elements
public void printMatrix(int[,] matrix, int rows, int cols)
{
int i = 0;
int j = 0;
for (i = 0; i < rows; ++i)
{
for (j = 0; j < cols; ++j)
{
Console.Write(" " + matrix[i,j]);
}
Console.Write("\n");
}
Console.Write("\n");
}
// This is Recursively change the old color to new color of a given grid location
public void floodFill(int x, int y, int color, int oldColor, int[,] matrix, int rows, int cols)
{
// When size are not valid to given matrix
if (x >= rows || y >= cols || y < 0 || x < 0)
{
return;
}
if (matrix[x,y] == oldColor)
{
// Change existing color
matrix[x,y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
floodFill(x + 1, y, color, oldColor, matrix, rows, cols);
floodFill(x, y + 1, color, oldColor, matrix, rows, cols);
floodFill(x - 1, y, color, oldColor, matrix, rows, cols);
floodFill(x, y - 1, color, oldColor, matrix, rows, cols);
}
}
// Handles the request to perform fill color operation
public void fillColor(int x, int y, int color, int[,] matrix)
{
// Get the size
int rows = matrix.GetLength(0);
int cols = matrix.GetLength(1);
if (y < 0 || x < 0 || x >= rows || y >= cols)
{
Console.Write("\n Invalid Position (" + x + " , " + y + ")");
return;
}
Console.Write("\n Before fill color " + color + " in Start (" + x + " , " + y + ") Location\n");
printMatrix(matrix, rows, cols);
floodFill(x, y, color, matrix[x,y], matrix, rows, cols);
Console.Write("\n After fill color " + color + " in Start (" + x + " , " + y + ") Location \n");
printMatrix(matrix, rows, cols);
}
public static void Main(String[] args)
{
MyMatrix obj = new MyMatrix();
int[,] matrix =
{
{9, 9, 9 , 9, 9, 9 },
{9, 1, 9 , 2, 6, 9 },
{1, 1, 9 , 2, 9, 9 },
{1, 1, 1 , 2, 9, 9 },
{1, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 1, 1 },
{2, 2, 1 , 2, 2, 2 }
};
// Location
int x = 1;
int y = 2;
// new color
int color = 4;
obj.fillColor(x, y, color, matrix);
}
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
<?php
/*
Php Program
Flood fill Algorithm
*/
class MyMatrix
{
// Displaying of the matrix elements
public function printMatrix( & $matrix, $rows, $cols)
{
$i = 0;
$j = 0;
for ($i = 0; $i < $rows; ++$i)
{
for ($j = 0; $j < $cols; ++$j)
{
echo " ". $matrix[$i][$j];
}
echo "\n";
}
echo "\n";
}
// This is Recursively change the old color to new color of a given grid location
public function floodFill($x, $y, $color, $oldColor, & $matrix, $rows, $cols)
{
// When size are not valid to given matrix
if ($x >= $rows || $y >= $cols || $y < 0 || $x < 0)
{
return;
}
if ($matrix[$x][$y] == $oldColor)
{
// Change existing color
$matrix[$x][$y] = $color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
$this->floodFill($x + 1, $y, $color, $oldColor, $matrix, $rows, $cols);
$this->floodFill($x, $y + 1, $color, $oldColor, $matrix, $rows, $cols);
$this->floodFill($x - 1, $y, $color, $oldColor, $matrix, $rows, $cols);
$this->floodFill($x, $y - 1, $color, $oldColor, $matrix, $rows, $cols);
}
}
// Handles the request to perform fill color operation
public function fillColor($x, $y, $color, & $matrix)
{
// Get the size
$rows = count($matrix);
$cols = count($matrix[0]);
if ($y < 0 || $x < 0 || $x >= $rows || $y >= $cols)
{
echo "\n Invalid Position (". $x ." , ". $y .")";
return;
}
echo "\n Before fill color ". $color ." in Start (". $x ." , ". $y .") Location\n";
$this->printMatrix($matrix, $rows, $cols);
$this->floodFill($x, $y, $color, $matrix[$x][$y], $matrix, $rows, $cols);
echo "\n After fill color ". $color ." in Start (". $x ." , ". $y .") Location \n";
$this->printMatrix($matrix, $rows, $cols);
}
}
function main()
{
$obj = new MyMatrix();
$matrix = array(
array(9, 9, 9, 9, 9, 9),
array(9, 1, 9, 2, 6, 9),
array(1, 1, 9, 2, 9, 9),
array(1, 1, 1, 2, 9, 9),
array(1, 2, 1, 2, 1, 1),
array(2, 2, 1, 2, 1, 1),
array(2, 2, 1, 2, 2, 2)
);
// Location
$x = 1;
$y = 2;
// new color
$color = 4;
$obj->fillColor($x, $y, $color, $matrix);
}
main();
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
/*
Node Js Program
Flood fill Algorithm
*/
class MyMatrix
{
// Displaying of the matrix elements
printMatrix(matrix, rows, cols)
{
var i = 0;
var j = 0;
for (i = 0; i < rows; ++i)
{
for (j = 0; j < cols; ++j)
{
process.stdout.write(" " + matrix[i][j]);
}
process.stdout.write("\n");
}
process.stdout.write("\n");
}
// This is Recursively change the old color to new color of a given grid location
floodFill(x, y, color, oldColor, matrix, rows, cols)
{
// When size are not valid to given matrix
if (x >= rows || y >= cols || y < 0 || x < 0)
{
return;
}
if (matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
this.floodFill(x + 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y + 1, color, oldColor, matrix, rows, cols);
this.floodFill(x - 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y - 1, color, oldColor, matrix, rows, cols);
}
}
// Handles the request to perform fill color operation
fillColor(x, y, color, matrix)
{
// Get the size
var rows = matrix.length;
var cols = matrix[0].length;
if (y < 0 || x < 0 || x >= rows || y >= cols)
{
process.stdout.write("\n Invalid Position (" + x + " , " + y + ")");
return;
}
process.stdout.write("\n Before fill color " + color + " in Start (" + x + " , " + y + ") Location\n");
this.printMatrix(matrix, rows, cols);
this.floodFill(x, y, color, matrix[x][y], matrix, rows, cols);
process.stdout.write("\n After fill color " + color + " in Start (" + x + " , " + y + ") Location \n");
this.printMatrix(matrix, rows, cols);
}
}
function main()
{
var obj = new MyMatrix();
var matrix = [
[9, 9, 9, 9, 9, 9] ,
[9, 1, 9, 2, 6, 9] ,
[1, 1, 9, 2, 9, 9] ,
[1, 1, 1, 2, 9, 9] ,
[1, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 2, 2]
];
// Location
var x = 1;
var y = 2;
// new color
var color = 4;
obj.fillColor(x, y, color, matrix);
}
main();
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
# Python 3 Program
# Flood fill Algorithm
class MyMatrix :
# Displaying of the matrix elements
def printMatrix(self, matrix, rows, cols) :
i = 0
j = 0
while (i < rows) :
j = 0
while (j < cols) :
print(" ", matrix[i][j], end = "")
j += 1
print(end = "\n")
i += 1
print(end = "\n")
# This is Recursively change the old color to new color of a given grid location
def floodFill(self, x, y, color, oldColor, matrix, rows, cols) :
# When size are not valid to given matrix
if (x >= rows or y >= cols or y < 0 or x < 0) :
return
if (matrix[x][y] == oldColor) :
# Change existing color
matrix[x][y] = color
# Visit to adjacent elements
# Recursively visiting of matrix elements
self.floodFill(x + 1, y, color, oldColor, matrix, rows, cols)
self.floodFill(x, y + 1, color, oldColor, matrix, rows, cols)
self.floodFill(x - 1, y, color, oldColor, matrix, rows, cols)
self.floodFill(x, y - 1, color, oldColor, matrix, rows, cols)
# Handles the request to perform fill color operation
def fillColor(self, x, y, color, matrix) :
# Get the size
rows = len(matrix)
cols = len(matrix[0])
if (y < 0 or x < 0 or x >= rows or y >= cols) :
print("\n Invalid Position (", x ," , ", y ,")", end = "")
return
print("\n Before fill color ", color ," in Start (", x ," , ", y ,") Location")
self.printMatrix(matrix, rows, cols)
self.floodFill(x, y, color, matrix[x][y], matrix, rows, cols)
print("\n After fill color ", color ," in Start (", x ," , ", y ,") Location ")
self.printMatrix(matrix, rows, cols)
def main() :
obj = MyMatrix()
matrix = [
[9, 9, 9, 9, 9, 9] ,
[9, 1, 9, 2, 6, 9] ,
[1, 1, 9, 2, 9, 9] ,
[1, 1, 1, 2, 9, 9] ,
[1, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 2, 2]
]
# Location
x = 1
y = 2
# new color
color = 4
obj.fillColor(x, y, color, matrix)
if __name__ == "__main__": main()
Output
Before fill color 4 in Start ( 1 , 2 ) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start ( 1 , 2 ) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
# Ruby Program
# Flood fill Algorithm
class MyMatrix
# Displaying of the matrix elements
def printMatrix(matrix, rows, cols)
i = 0
j = 0
while (i < rows)
j = 0
while (j < cols)
print(" ", matrix[i][j])
j += 1
end
print("\n")
i += 1
end
print("\n")
end
# This is Recursively change the old color to new color of a given grid location
def floodFill(x, y, color, oldColor, matrix, rows, cols)
# When size are not valid to given matrix
if (x >= rows || y >= cols || y < 0 || x < 0)
return
end
if (matrix[x][y] == oldColor)
# Change existing color
matrix[x][y] = color
# Visit to adjacent elements
# Recursively visiting of matrix elements
self.floodFill(x + 1, y, color, oldColor, matrix, rows, cols)
self.floodFill(x, y + 1, color, oldColor, matrix, rows, cols)
self.floodFill(x - 1, y, color, oldColor, matrix, rows, cols)
self.floodFill(x, y - 1, color, oldColor, matrix, rows, cols)
end
end
# Handles the request to perform fill color operation
def fillColor(x, y, color, matrix)
# Get the size
rows = matrix.length
cols = matrix[0].length
if (y < 0 || x < 0 || x >= rows || y >= cols)
print("\n Invalid Position (", x ," , ", y ,")")
return
end
print("\n Before fill color ", color ," in Start (", x ," , ", y ,") Location\n")
self.printMatrix(matrix, rows, cols)
self.floodFill(x, y, color, matrix[x][y], matrix, rows, cols)
print("\n After fill color ", color ," in Start (", x ," , ", y ,") Location \n")
self.printMatrix(matrix, rows, cols)
end
end
def main()
obj = MyMatrix.new()
matrix = [
[9, 9, 9, 9, 9, 9] ,
[9, 1, 9, 2, 6, 9] ,
[1, 1, 9, 2, 9, 9] ,
[1, 1, 1, 2, 9, 9] ,
[1, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 2, 2]
]
# Location
x = 1
y = 2
# new color
color = 4
obj.fillColor(x, y, color, matrix)
end
main()
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
/*
Scala Program
Flood fill Algorithm
*/
class MyMatrix
{
// Displaying of the matrix elements
def printMatrix(matrix: Array[Array[Int]], rows: Int, cols: Int): Unit = {
var i: Int = 0;
var j: Int = 0;
while (i < rows)
{
j = 0;
while (j < cols)
{
print(" " + matrix(i)(j));
j += 1;
}
print("\n");
i += 1;
}
print("\n");
}
// This is Recursively change the old color to new color of a given grid location
def floodFill(x: Int, y: Int, color: Int, oldColor: Int, matrix: Array[Array[Int]], rows: Int, cols: Int): Unit = {
// When size are not valid to given matrix
if (x >= rows || y >= cols || y < 0 || x < 0)
{
return;
}
if (matrix(x)(y) == oldColor)
{
// Change existing color
matrix(x)(y) = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
this.floodFill(x + 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y + 1, color, oldColor, matrix, rows, cols);
this.floodFill(x - 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y - 1, color, oldColor, matrix, rows, cols);
}
}
// Handles the request to perform fill color operation
def fillColor(x: Int, y: Int, color: Int, matrix: Array[Array[Int]]): Unit = {
// Get the size
var rows: Int = matrix.length;
var cols: Int = matrix(0).length;
if (y < 0 || x < 0 || x >= rows || y >= cols)
{
print("\n Invalid Position (" + x + " , " + y + ")");
return;
}
print("\n Before fill color " + color + " in Start (" + x + " , " + y + ") Location\n");
this.printMatrix(matrix, rows, cols);
this.floodFill(x, y, color, matrix(x)(y), matrix, rows, cols);
print("\n After fill color " + color + " in Start (" + x + " , " + y + ") Location \n");
this.printMatrix(matrix, rows, cols);
}
}
object Main
{
def main(args: Array[String]): Unit = {
var obj: MyMatrix = new MyMatrix();
var matrix: Array[Array[Int]] = Array(
Array(9, 9, 9, 9, 9, 9),
Array(9, 1, 9, 2, 6, 9),
Array(1, 1, 9, 2, 9, 9),
Array(1, 1, 1, 2, 9, 9),
Array(1, 2, 1, 2, 1, 1),
Array(2, 2, 1, 2, 1, 1),
Array(2, 2, 1, 2, 2, 2)
);
// Location
var x: Int = 1;
var y: Int = 2;
// new color
var color: Int = 4;
obj.fillColor(x, y, color, matrix);
}
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
/*
Swift 4 Program
Flood fill Algorithm
*/
class MyMatrix
{
// Displaying of the matrix elements
func printMatrix(_ matrix: [[Int]], _ rows: Int, _ cols: Int)
{
var i: Int = 0;
var j: Int = 0;
while (i < rows)
{
j = 0;
while (j < cols)
{
print(" ", matrix[i][j], terminator: "");
j += 1;
}
print(terminator: "\n");
i += 1;
}
print(terminator: "\n");
}
// This is Recursively change the old color to new color of a given grid location
func floodFill(_ x: Int, _ y: Int, _ color: Int, _ oldColor: Int, _ matrix: inout[[Int]], _ rows: Int, _ cols: Int)
{
// When size are not valid to given matrix
if (x >= rows || y >= cols || y < 0 || x < 0)
{
return;
}
if (matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
self.floodFill(x + 1, y, color, oldColor, &matrix, rows, cols);
self.floodFill(x, y + 1, color, oldColor, &matrix, rows, cols);
self.floodFill(x - 1, y, color, oldColor, &matrix, rows, cols);
self.floodFill(x, y - 1, color, oldColor, &matrix, rows, cols);
}
}
// Handles the request to perform fill color operation
func fillColor(_ x: Int, _ y: Int, _ color: Int, _ matrix: inout[[Int]])
{
// Get the size
let rows: Int = matrix.count;
let cols: Int = matrix[0].count;
if (y < 0 || x < 0 || x >= rows || y >= cols)
{
print("\n Invalid Position (", x ," , ", y ,")", terminator: "");
return;
}
print("\n Before fill color ", color ," in Start (", x ," , ", y ,") Location");
self.printMatrix(matrix, rows, cols);
self.floodFill(x, y, color, matrix[x][y], &matrix, rows, cols);
print("\n After fill color ", color ," in Start (", x ," , ", y ,") Location ");
self.printMatrix(matrix, rows, cols);
}
}
func main()
{
let obj: MyMatrix = MyMatrix();
var matrix: [[Int]] = [
[9, 9, 9, 9, 9, 9] ,
[9, 1, 9, 2, 6, 9] ,
[1, 1, 9, 2, 9, 9] ,
[1, 1, 1, 2, 9, 9] ,
[1, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 1, 1] ,
[2, 2, 1, 2, 2, 2]
];
// Location
let x: Int = 1;
let y: Int = 2;
// new color
let color: Int = 4;
obj.fillColor(x, y, color, &matrix);
}
main();
Output
Before fill color 4 in Start ( 1 , 2 ) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start ( 1 , 2 ) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
/*
Kotlin Program
Flood fill Algorithm
*/
class MyMatrix
{
// Displaying of the matrix elements
fun printMatrix(matrix: Array<Array<Int>> , rows: Int, cols: Int): Unit
{
var i: Int = 0;
var j: Int = 0;
while (i<rows)
{
while (j<cols)
{
print(" " + matrix[i][j]);
j += 1;
}
print("\n");
i += 1;
j = 0;
}
print("\n");
}
// This is Recursively change the old color to new color of a given grid location
fun floodFill(x: Int, y: Int, color: Int, oldColor: Int, matrix: Array<Array<Int>> , rows: Int, cols: Int): Unit
{
// When size are not valid to given matrix
if (x>= rows || y>= cols || y<0 || x<0)
{
return;
}
if (matrix[x][y] == oldColor)
{
// Change existing color
matrix[x][y] = color;
// Visit to adjacent elements
// Recursively visiting of matrix elements
this.floodFill(x + 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y + 1, color, oldColor, matrix, rows, cols);
this.floodFill(x - 1, y, color, oldColor, matrix, rows, cols);
this.floodFill(x, y - 1, color, oldColor, matrix, rows, cols);
}
}
// Handles the request to perform fill color operation
fun fillColor(x: Int, y: Int, color: Int, matrix: Array<Array<Int>> ): Unit
{
// Get the size
var rows: Int = matrix.count();
var cols: Int = matrix[0].count();
if (y<0 || x<0 || x>= rows || y>= cols)
{
print("\n Invalid Position (" + x + " , " + y + ")");
return;
}
print("\n Before fill color " + color + " in Start (" + x + " , " + y + ") Location\n");
this.printMatrix(matrix, rows, cols);
this.floodFill(x, y, color, matrix[x][y], matrix, rows, cols);
print("\n After fill color " + color + " in Start (" + x + " , " + y + ") Location \n");
this.printMatrix(matrix, rows, cols);
}
}
fun main(args: Array<String>): Unit
{
var obj: MyMatrix = MyMatrix();
var matrix: Array<Array<Int>> = arrayOf(
arrayOf(9, 9, 9, 9, 9, 9),
arrayOf(9, 1, 9, 2, 6, 9),
arrayOf(1, 1, 9, 2, 9, 9),
arrayOf(1, 1, 1, 2, 9, 9),
arrayOf(1, 2, 1, 2, 1, 1),
arrayOf(2, 2, 1, 2, 1, 1),
arrayOf(2, 2, 1, 2, 2, 2)
);
// Location
var x: Int = 1;
var y: Int = 2;
// new color
var color: Int = 4;
obj.fillColor(x, y, color, matrix);
}
Output
Before fill color 4 in Start (1 , 2) Location
9 9 9 9 9 9
9 1 9 2 6 9
1 1 9 2 9 9
1 1 1 2 9 9
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
After fill color 4 in Start (1 , 2) Location
4 4 4 4 4 4
4 1 4 2 6 4
1 1 4 2 4 4
1 1 1 2 4 4
1 2 1 2 1 1
2 2 1 2 1 1
2 2 1 2 2 2
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment