package Ġcom . gn ader i . is land hop ping . service Ċ Ċ import Ġcom . gn ader i . is land hop ping . dto . Is land Ċ import Ġcom . gn ader i . is land hop ping . dto . Tile Ċ import Ġcom . gn ader i . is land hop ping . entity . TileEntity Ċ import Ġcom . gn ader i . is land hop ping . common . Tile Type Ċ import Ġcom . gn ader i . is land hop ping . common . Entity To Dto Converter Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . util .* Ċ Ċ @ Service Ċ class ĠIsland Hop ing Ġ: ĠIsland Hop ing Service Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġentity To Dto Converter : ĠEntity To Dto Converter ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠH op ping Pointer Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġrow Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġcol Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdiscover Is lands ( tiles Entities : ĠMutable List < TileEntity >, Ġmap Id : ĠInt ): ĠList < Is land > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtiles Ġ= Ġentity To Dto Converter . convert TileEntity To Tiles ( tiles Entities ) ĊĠĠĠĠĠĠĠ Ġval Ġrow Len Ġ= Ġtiles . size ĊĠĠĠĠĠĠĠ Ġval Ġcol Len Ġ= Ġtiles [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġvar Ġis land Counter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġis lands Ġ= ĠArrayList < Is land >() ĊĠĠĠĠĠĠĠ Ġif Ġ( row Len Ġ< Ġ 2 Ġ&& Ġcol Len Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis lands . add ( Is land ( is land Counter ++, Ġmap Id , Ġentity To Dto Converter . convert Tile Entities List To Tiles ( tiles Entities ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġis lands ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvisited Tiles Ġ= ĠArray ( row Len ) Ġ{ ĠArray ( col Len , Ġ{ Ġfalse Ġ}) Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Is land Ġ= ĠIsland () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Hop Ġ= ĠH op ping Pointer () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 0 Ġuntil Ġrow Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( col Ġin Ġ 0 Ġuntil Ġcol Len ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! visited Tiles [ row ][ col ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tiles [ row ][ col ] !!. type Ġ=== ĠTile Type . WATER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ row ][ col ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Hop . row Ġ= Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Hop . col Ġ= Ġcol ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ current Hop . row ][ current Hop . col ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Is land ( tiles , Ġvisited Tiles , Ġcurrent Hop , Ġcurrent Is land ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis lands . add ( current Is land ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Is land Ġ= ĠIsland ( is land Counter ++, Ġmap Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġis lands ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Is land ( tiles : ĠArray < Array < Tile >>, Ġvisited Tiles : ĠArray < Array < Boolean >>, Ġhop ping Pointer : ĠH op ping Pointer , Ġcurrent Is land : ĠIsland ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Hop ping Pointer Ġ= ĠStack < Hop ping Pointer >() ĊĠĠĠĠĠĠĠ Ġstack Hop ping Pointer . push ( hop ping Pointer ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! stack Hop ping Pointer . empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Hop ping Pointer Ġ= Ġstack Hop ping Pointer . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhop ed Tile Ġ= Ġtiles [ current Hop ping Pointer . row ][ current Hop ping Pointer . col ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Is land . tiles . add ( hop ed Tile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext Tile ( tiles , Ġvisited Tiles , Ġcurrent Hop ping Pointer )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Hop ping Pointer Ġ= Ġhop To Next ( tiles , Ġvisited Tiles , Ġcurrent Hop ping Pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ next Hop ping Pointer . row ][ next Hop ping Pointer . col ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack Hop ping Pointer . push ( current Hop ping Pointer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Hop ping Pointer Ġ= Ġnext Hop ping Pointer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhop To Next ( tiles : ĠArray < Array < Tile >>, Ġvisited Tiles : ĠArray < Array < Boolean >>, Ġcurrent Hop ping Pointer : ĠH op ping Pointer ): ĠH op ping Pointer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum _ row Ġ= Ġvisited Tiles . size ĊĠĠĠĠĠĠĠ Ġval Ġnum _ col Ġ= Ġvisited Tiles [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġcurrent Hop ping Pointer . row ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcurrent Hop ping Pointer . col ĊĊĠĠĠĠĠĠĠ Ġval Ġnext Hop ping Pointer Ġ= ĠH op ping Pointer () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġnum _ col Ġ- Ġ 1 Ġ&& Ġ! visited Tiles [ x ][ y Ġ+ Ġ 1 ] Ġ&& Ġtiles [ x ][ y Ġ+ Ġ 1 ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ x ][ y Ġ+ Ġ 1 ] Ġ= Ġvisited Tiles [ x ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . row Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . col Ġ= Ġy Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Hop ping Pointer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġnum _ row Ġ- Ġ 1 Ġ&& Ġ! visited Tiles [ x Ġ+ Ġ 1 ][ y ] Ġ&& Ġtiles [ x Ġ+ Ġ 1 ][ y ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ x Ġ+ Ġ 1 ][ y ] Ġ= Ġvisited Tiles [ x ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . row Ġ= Ġx Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . col Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Hop ping Pointer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ> Ġ 0 Ġ&& Ġ! visited Tiles [ x ][ y Ġ- Ġ 1 ] Ġ&& Ġtiles [ x ][ y Ġ- Ġ 1 ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ x ][ y Ġ- Ġ 1 ] Ġ= Ġvisited Tiles [ x ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . row Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . col Ġ= Ġy Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Hop ping Pointer ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġ 0 Ġ&& Ġ! visited Tiles [ x Ġ- Ġ 1 ][ y ] Ġ&& Ġtiles [ x Ġ- Ġ 1 ][ y ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisited Tiles [ x Ġ- Ġ 1 ][ y ] Ġ= Ġvisited Tiles [ x ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . row Ġ= Ġx Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Hop ping Pointer . col Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext Hop ping Pointer ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnext Hop ping Pointer ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġhas Next Tile ( tiles : ĠArray < Array < Tile >>, Ġvisited Tiles : ĠArray < Array < Boolean >>, Ġcurrent Hop ping Pointer : ĠH op ping Pointer ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrow Len Ġ= Ġvisited Tiles . size ĊĠĠĠĠĠĠĠ Ġval Ġcol Len Ġ= Ġvisited Tiles [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġcurrent Hop ping Pointer . row ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcurrent Hop ping Pointer . col ĊĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġcol Len Ġ- Ġ 1 Ġ&& Ġ! visited Tiles [ x ][ y Ġ+ Ġ 1 ] Ġ&& Ġtiles [ x ][ y Ġ+ Ġ 1 ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġrow Len Ġ- Ġ 1 Ġ&& Ġ! visited Tiles [ x Ġ+ Ġ 1 ][ y ] Ġ&& Ġtiles [ x Ġ+ Ġ 1 ][ y ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( y Ġ> Ġ 0 Ġ&& Ġ! visited Tiles [ x ][ y Ġ- Ġ 1 ] Ġ&& Ġtiles [ x ][ y Ġ- Ġ 1 ]. type Ġ=== ĠTile Type . LAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġx Ġ> Ġ 0 Ġ&& Ġ! visited Tiles [ x Ġ- Ġ 1 ][ y ] Ġ&& Ġtiles [ x Ġ- Ġ 1 ][ y ]. type Ġ=== ĠTile Type . LAND ĊĠĠĠ Ġ} Ċ } ĊĊ