package Ġru . sh ab ash off . game . players Ċ Ċ import Ġru . sh ab ash off . game . Game Cell Ċ import Ġru . sh ab ash off . game . Gift Ċ import Ġru . sh ab ash off . primitives . Int Point Ċ import Ġjava . util .* Ċ Ċ class ĠBot ( player Init : ĠInit Player , Ġsearching Gift : ĠG ift ) Ġ: ĠPlayer ( player Init , Ġsearching Gift ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġset Player : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĠĠĠ Ġprivate Ġval Ġset Cell : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĊĊĠĠĠ Ġfun Ġget Point To Move (): ĠInt Point Ġ{ ĊĠĠĠĠĠĠĠ Ġprepare Move () ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġvar Ġpp : ĠInt Point Ġ= ĠInt Point (- 1 , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i 1 Ġin Ġset Player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i 2 Ġin Ġset Cell ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠMath . abs ( i 1 . x Ġ- Ġi 2 . x ) Ġ+ ĠMath . abs ( i 1 . y Ġ- Ġi 2 . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġ= Ġi 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" MOVE Ġdelta Ġ$ min , Ġpp :$ pp ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( min Ġ== Ġ 0 ) Ġreturn Ġsearching Gift . point ĊĠĠĠĠĠĠĠ Ġreturn Ġpp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare Move () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Player . clear () ĊĠĠĠĠĠĠĠ Ġset Cell . clear () ĊĊĠĠĠĠĠĠĠ Ġthis . init Set ( map . map , Ġcur Point , Ġset Player ) ĊĠĠĠĠĠĠĠ Ġthis . init Set ( map . map , Ġsearching Gift . point , Ġset Cell ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Point To Put (): ĠInt Point Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( set Player . contains ( search ing Gift . point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Set : ĠMutable Set < Int > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Set : ĠMutable Set < Int > Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( map . w Ġ- Ġ 1 )) Ġx Set . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( map . h Ġ- Ġ 1 )) Ġy Set . add ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ip Ġin Ġset Player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Set . remove ( ip . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Set . remove ( ip . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Set . size Ġ> Ġ 0 ) Ġreturn ĠInt Point ( x Set . iterator (). next (), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Set . size Ġ> Ġ 0 ) Ġreturn ĠInt Point ( 0 , Ġy Set . iterator (). next ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInt Point ( map . w Ġ/ Ġ 2 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġmin : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġvar Ġpp : ĠInt Point Ġ= ĠInt Point (- 1 , Ġ- 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmp Ġ= Ġmap . map ĊĠĠĠĠĠĠĠ Ġval Ġoc Ġ= Ġmap . outer Cell ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( map . w Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcc Ġ= Ġget X Len ( mp , Ġoc , Ġi , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġ= ĠInt Point ( i , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Zero Ġin Ġ${ Int Point ( i , Ġ 0 )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcc Ġ= Ġget X Len ( mp , Ġoc , Ġi , Ġmap . h Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġ= ĠInt Point ( i , Ġmap . h Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Zero Ġin Ġ${ Int Point ( i , Ġmap . h Ġ- Ġ 1 )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. ( map . h Ġ- Ġ 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcc Ġ= Ġget Y Len ( mp , Ġoc , Ġ 0 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġ= ĠInt Point ( 0 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Zero Ġin Ġ${ Int Point ( 0 , Ġi )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcc Ġ= Ġget Y Len ( mp , Ġoc , Ġmap . w Ġ- Ġ 1 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġcc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpp Ġ= ĠInt Point ( map . w Ġ- Ġ 1 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cc Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Zero Ġin Ġ${ Int Point ( map . w Ġ- Ġ 1 , Ġi )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" PUT Ġdelta Ġ$ min , Ġpp :$ pp ") ĊĠĠĠĠĠĠĠ Ġreturn Ġpp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget X Len ( mp : ĠMutable List < Mutable List < Game Cell >>, Ġoc : ĠGame Cell , Ġx : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġt st : ĠMutable List < Mutable List < Game Cell >> Ġ= ĠMutable List ( mp . size ) Ġ{ Ġi Ġ-> ĠMutable List ( mp [ i ]. size ) Ġ{ Ġj Ġ-> Ġmp [ i ][ j ] Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġmove X Line ( tst , Ġoc , Ġx , Ġy , Ġmap . w , Ġmap . h ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġsc : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠ Ġthis . init Set ( tst , Ġcur Point , Ġsp ) ĊĠĠĠĠĠĠĠ Ġthis . init Set ( tst , Ġsearching Gift . point , Ġsc ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Min Len ( sp , Ġsc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Y Len ( mp : ĠMutable List < Mutable List < Game Cell >>, Ġoc : ĠGame Cell , Ġx : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġt st : ĠMutable List < Mutable List < Game Cell >> Ġ= ĠMutable List ( mp . size ) Ġ{ Ġi Ġ-> ĠMutable List ( mp [ i ]. size ) Ġ{ Ġj Ġ-> Ġmp [ i ][ j ] Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġmove Y Line ( tst , Ġoc , Ġx , Ġy , Ġmap . w , Ġmap . h ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġval Ġsc : ĠMutable Set < Int Point > Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠ Ġthis . init Set ( tst , Ġcur Point , Ġsp ) ĊĠĠĠĠĠĠĠ Ġthis . init Set ( tst , Ġsearching Gift . point , Ġsc ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Min Len ( sp , Ġsc ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Min Len ( f 1 : ĠMutable Set < Int Point >, Ġf 2 : ĠMutable Set < Int Point >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmin : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġfor Ġ( i 1 Ġin Ġf 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i 2 Ġin Ġf 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠMath . abs ( i 1 . x Ġ- Ġi 2 . x ) Ġ+ ĠMath . abs ( i 1 . y Ġ- Ġi 2 . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġi ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmin ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmove X Line ( map : ĠMutable List < Mutable List < Game Cell >>, Ġouter Cell : ĠGame Cell , Ġx : ĠInt , Ġy : ĠInt , Ġw : ĠInt , Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Cell : ĠGame Cell Ġ= Ġouter Cell ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhl Ġ= Ġmap [ i ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ i ][ y ] Ġ= Ġnext Cell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġhl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Cell : ĠGame Cell Ġ= Ġouter Cell ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġw Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhl Ġ= Ġmap [ i ][ y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ i ][ y ] Ġ= Ġnext Cell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġhl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġmove Y Line ( map : ĠMutable List < Mutable List < Game Cell >>, Ġouter Cell : ĠGame Cell , Ġx : ĠInt , Ġy : ĠInt , Ġw : ĠInt , Ġh : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġmap [ x ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . add ( 0 , Ġouter Cell ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . remove At ( h ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . add ( outer Cell ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . remove At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġis Bot (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Set ( map : ĠList < List < Game Cell >>, Ġcp : ĠInt Point , Ġrc : ĠMutable Set < Int Point >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( rc . contains ( cp )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġrc . add ( cp ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġmap [ cp . x ][ cp . y ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cell . type . bottom Ġ&& Ġcp . y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġmap [ cp . x ][ cp . y Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl . type . up ) Ġthis . init Set ( map , ĠInt Point ( cp . x , Ġcp . y Ġ- Ġ 1 ), Ġrc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cell . type . up Ġ&& Ġcp . y Ġ+ Ġ 1 Ġ< Ġmap [ 0 ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġmap [ cp . x ][ cp . y Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl . type . bottom ) Ġthis . init Set ( map , ĠInt Point ( cp . x , Ġcp . y Ġ+ Ġ 1 ), Ġrc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cell . type . left Ġ&& Ġcp . x Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġmap [ cp . x Ġ- Ġ 1 ][ cp . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl . type . right ) Ġthis . init Set ( map , ĠInt Point ( cp . x Ġ- Ġ 1 , Ġcp . y ), Ġrc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cell . type . right Ġ&& Ġcp . x Ġ+ Ġ 1 Ġ< Ġmap . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġmap [ cp . x Ġ+ Ġ 1 ][ cp . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cl . type . left ) Ġthis . init Set ( map , ĠInt Point ( cp . x Ġ+ Ġ 1 , Ġcp . y ), Ġrc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ /* ĊĠĠĠ Ġprivate Ġfun Ġinit Set ( map : ĠList < List < Game Cell >>, Ġcur Point : ĠInt Point , Ġvis : ĠMutable Set < Int Point >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// println ( cur Point ) ĊĊĠĠĠĠĠĠĠ Ġvis . add ( cur Point ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcur Cell : ĠGame Cell Ġ= Ġmap [ cur Point . x ][ cur Point . y ] ĊĠĠĠĠĠĠĠ Ġvar Ġnext Cell : ĠGame Cell ĊĠĠĠĠĠĠĠ Ġvar Ġnext Point : ĠInt Point ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cur Cell . type . up Ġ&& Ġcur Point . y Ġ+ Ġ 1 Ġ< Ġmap [ 0 ]. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Ġ= ĠInt Point ( cur Point . x , Ġcur Point . y Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġmap [ next Point . x ][ next Point . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Cell . type . bottom Ġ&& Ġ! vis . contains ( next Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . init Set ( map , Ġnext Point , Ġvis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cur Cell . type . bottom Ġ&& Ġcur Point . y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Ġ= ĠInt Point ( cur Point . x , Ġcur Point . y Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġmap [ next Point . x ][ next Point . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Cell . type . up Ġ&& Ġ! vis . contains ( next Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . init Set ( map , Ġnext Point , Ġvis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cur Cell . type . left Ġ&& Ġcur Point . x Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Ġ= ĠInt Point ( cur Point . x Ġ- Ġ 1 , Ġcur Point . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġmap [ next Point . x ][ next Point . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Cell . type . right Ġ&& Ġ! vis . contains ( next Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . init Set ( map , Ġnext Point , Ġvis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cur Cell . type . right Ġ&& Ġcur Point . x Ġ+ Ġ 1 Ġ< Ġmap . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Ġ= ĠInt Point ( cur Point . x Ġ+ Ġ 1 , Ġcur Point . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Cell Ġ= Ġmap [ next Point . x ][ next Point . y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Cell . type . left Ġ&& Ġ! vis . contains ( next Point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . init Set ( map , Ġnext Point , Ġvis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġprivate Ġfun Ġchoose Min Way ( map : ĠList < List < Game Cell >>, Ġfrom : ĠInt Point , Ġto : ĠInt Point ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġchoose Ġmin Ġway ĊĊĊĠĠĠ Ġ} Ċ }