package Ġle et code . google Ċ Ċ import Ġjava . util .* Ċ Ċ class ĠShort est Path In AG rid With Ob stacles Elimin ation Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdi Ġ= ĠlistOf ( 1 , Ġ- 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġprivate Ġval Ġdj Ġ= ĠlistOf ( 0 , Ġ 0 , Ġ 1 , Ġ- 1 ) ĊĊĠĠĠ Ġfun Ġshortest Path ( grid : ĠArray < IntArray >, Ġk : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġgrid . size ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġgrid [ 0 ]. size ĊĠĠĠĠĠĠĠ Ġval Ġstart State Ġ= ĠState ( 0 , Ġ 0 , Ġk ) ĊĠĠĠĠĠĠĠ Ġval Ġqueue : ĠQueue < State > Ġ= ĠLinkedList () ĊĠĠĠĠĠĠĠ Ġqueue . offer ( start State ) ĊĠĠĠĠĠĠĠ Ġval Ġvisited Ġ= Ġhash Map Of < State , ĠInt >() ĊĠĠĠĠĠĠĠ Ġvisited [ start State ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlevel Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġqueue . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġ 0 Ġuntil Ġq ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġqueue . poll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur . x Ġ== Ġn Ġ- Ġ 1 Ġ&& Ġcur . y Ġ== Ġm Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnx Ġ= Ġcur . x Ġ+ Ġdi [ d ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġny Ġ= Ġcur . y Ġ+ Ġdj [ d ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nx Ġin Ġ 0 Ġuntil Ġn Ġ&& Ġny Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn State Ġ= ĠState ( nx , Ġny , Ġcur . remaining Elimin ation Ġ- Ġgrid [ nx ][ ny ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n State . remaining Elimin ation Ġ>= Ġ 0 Ġ&& Ġ! visited . contains ( n State )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . offer ( n State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited [ n State ] Ġ= Ġlevel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠState ( val Ġx : ĠInt , Ġval Ġy : ĠInt , Ġval Ġremaining Elimin ation : ĠInt ) Ċ }