package Ġio . queue Ċ Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ // Ġhttps :// leetcode . com / explore / learn / card / queue - stack / 2 3 1 / pract ical - application - queue / 1 3 7 4 / Ċ class ĠNumber Of Is lands Ġ{ ĊĊĠ Ġfun Ġexecute ( grid : ĠArray < CharArray >): ĠInt Ġ{ ĊĠĠĠ Ġval Ġvisited Ġ= ĠHashSet < Coordinates >() ĊĠĠĠ Ġvar ĠnumberOf Is lands Ġ= Ġ 0 ĊĠĠĠ Ġgrid . map Indexed Ġ{ Ġindex , Ġchars Ġ-> ĊĠĠĠĠĠ Ġchars . map Indexed Ġ{ Ġinternal Index , Ġchar Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcoordinates Ġ= ĠCoordinates ( index , Ġinternal Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! visited . contains ( coordinates )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvisited . add ( coordinates ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ!= Ġ' 0 ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Is lands Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Is land ( grid , Ġcoordinates , Ġvisited , Ġgrid . size , Ġchars . size ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠnumberOf Is lands ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġvisit Is land ( grid : ĠArray < CharArray >, Ġroot : ĠCoordinates , Ġvisited : ĠHashSet < Coordinates >, Ġmax I : ĠInt , Ġmax J : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġstack Ġ= ĠStack < List < Coordinates >>() ĊĠĠĠ Ġstack . push ( listOf ( root )) ĊĠĠĠ Ġwhile Ġ( stack . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġcoordinates Ġ= Ġstack . pop () ĊĠĠĠĠĠ Ġcoordinates . map Ġ{ Ġcoordinate Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ(! visited . contains ( coordinate )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvisited . add ( coordinate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( grid [ coordinate . i ][ coordinate . j ] Ġ!= Ġ' 0 ') Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcoordinate . generate Child ( max I , Ġmax J ). filter Ġ{ Ġ! visited . contains ( it ) Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠCoordinates ( val Ġi : ĠInt , Ġval Ġj : ĠInt ) Ġ{ ĊĊĠ Ġfun Ġgenerate Child ( max I : ĠInt , Ġmax J : ĠInt ) Ġ= ĊĠĠĠĠĠ Ġmutable ListOf < Coordinates >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ+ Ġ 1 Ġ< Ġmax I ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( Coordinates ( i Ġ+ Ġ 1 , Ġj )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġ+ Ġ 1 Ġ< Ġmax J ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( Coordinates ( i , Ġj Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( Coordinates ( i Ġ- Ġ 1 , Ġj )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( Coordinates ( i , Ġj Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠ Ġval ĠnumberOf Is lands Ġ= ĠNumber Of Is lands () ĊĠ ĠlistOf ( ĊĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 1 1 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 0 1 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 0 0 0 0 0 "), ĊĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 0 0 1 0 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 0 0 0 1 1 "), ĊĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 1 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 0 1 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġ" 1 1 1 ") ĊĠ Ġ). map Ġ{ Ġgrid Ġ-> ĊĠĠĠ Ġprintln (" Ġ${ numberOf Is lands . execute ( grid . map Ġ{ Ġit . toCharArray () Ġ}. to Typed Array ()) }") ĊĊĠ Ġ} Ċ }