1+ package com .thealgorithms .dynamicprogramming ;
2+
3+ /**
4+ * Java program for Boundary fill algorithm.
5+ * @author Akshay Dubey (https://github.com/itsAkshayDubey)
6+ */
7+ public class BoundaryFill {
8+
9+ /**
10+ * Get the color at the given co-odrinates of a 2D image
11+ *
12+ * @param image The image to be filled
13+ * @param x_co_ordinate The x co-ordinate of which color is to be obtained
14+ * @param y_co_ordinate The y co-ordinate of which color is to be obtained
15+ */
16+ public static int getPixel (int [][]image ,int x_co_ordinate ,int y_co_ordinate ) {
17+
18+ return image [x_co_ordinate ][y_co_ordinate ];
19+
20+ }
21+
22+ /**
23+ * Put the color at the given co-odrinates of a 2D image
24+ *
25+ * @param image The image to be filed
26+ * @param x_co_ordinate The x co-ordinate at which color is to be filled
27+ * @param y_co_ordinate The y co-ordinate at which color is to be filled
28+ */
29+ public static void putPixel (int [][]image ,int x_co_ordinate ,int y_co_ordinate ,int new_color ) {
30+
31+ image [x_co_ordinate ][y_co_ordinate ] =new_color ;
32+
33+ }
34+
35+ /**
36+ * Fill the 2D image with new color
37+ *
38+ * @param image The image to be filed
39+ * @param x_co_ordinate The x co-ordinate at which color is to be filled
40+ * @param y_co_ordinate The y co-ordinate at which color is to be filled
41+ * @param new_color The new color which to be filled in the image
42+ * @param boundary_color The old color which is to be replaced in the image
43+ */
44+ public static void boundaryFill (int [][]image ,int x_co_ordinate ,int y_co_ordinate ,int new_color ,int boundary_color ) {
45+ if (x_co_ordinate >=0 &&y_co_ordinate >=0 &&getPixel (image ,x_co_ordinate ,y_co_ordinate ) !=new_color &&getPixel (image ,x_co_ordinate ,y_co_ordinate ) !=boundary_color ) {
46+
47+ putPixel (image ,x_co_ordinate ,y_co_ordinate ,new_color );
48+ boundaryFill (image ,x_co_ordinate +1 ,y_co_ordinate ,new_color ,boundary_color );
49+ boundaryFill (image ,x_co_ordinate -1 ,y_co_ordinate ,new_color ,boundary_color );
50+ boundaryFill (image ,x_co_ordinate ,y_co_ordinate +1 ,new_color ,boundary_color );
51+ boundaryFill (image ,x_co_ordinate ,y_co_ordinate -1 ,new_color ,boundary_color );
52+ boundaryFill (image ,x_co_ordinate +1 ,y_co_ordinate -1 ,new_color ,boundary_color );
53+ boundaryFill (image ,x_co_ordinate -1 ,y_co_ordinate +1 ,new_color ,boundary_color );
54+ boundaryFill (image ,x_co_ordinate +1 ,y_co_ordinate +1 ,new_color ,boundary_color );
55+ boundaryFill (image ,x_co_ordinate -1 ,y_co_ordinate -1 ,new_color ,boundary_color );
56+
57+
58+ }
59+
60+ }
61+
62+ /**
63+ * This method will print the 2D image matrix
64+ *
65+ * @param image The image to be printed on the console
66+ */
67+ public static void printImageArray (int [][]image ) {
68+
69+ for (int i =0 ;i <image .length ;i ++) {
70+ for (int j =0 ;j <image [0 ].length ;j ++) {
71+
72+ System .out .print (image [i ][j ]+" " );
73+ }
74+
75+ System .out .println ();
76+ }
77+
78+ }
79+
80+ // Driver Program
81+ public static void main (String []args ) {
82+
83+ //Input 2D image matrix
84+ int [][]image = {
85+ {0 ,0 ,0 ,0 ,0 ,0 ,0 },
86+ {0 ,3 ,3 ,3 ,3 ,0 ,0 },
87+ {0 ,3 ,0 ,0 ,3 ,0 ,0 },
88+ {0 ,3 ,0 ,0 ,3 ,3 ,3 },
89+ {0 ,3 ,3 ,3 ,0 ,0 ,3 },
90+ {0 ,0 ,0 ,3 ,0 ,0 ,3 },
91+ {0 ,0 ,0 ,3 ,3 ,3 ,3 }
92+ };
93+
94+
95+ boundaryFill (image ,2 ,2 ,5 ,3 );
96+
97+ /* Output ==>
98+ * 0 0 0 0 0 0 0
99+ 0 3 3 3 3 0 0
100+ 0 3 5 5 3 0 0
101+ 0 3 5 5 3 3 3
102+ 0 3 3 3 5 5 3
103+ 0 0 0 3 5 5 3
104+ 0 0 0 3 3 3 3
105+ * */
106+
107+ //print 2D image matrix
108+ printImageArray (image );
109+ }
110+
111+ }