package Ġorg . ad vent of code Ċ Ċ data Ġclass ĠD ijk stra ( val Ġmap : ĠMap ) Ġ{ ĊĠ Ġval Ġbreadcrumb s : ĠHashMap < String , ĠPair < String , ĠInt >> Ġ= Ġhash Map Of () ĊĠ Ġval Ġvisited : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĊĠ Ġprivate Ġfun Ġgo Forward ( start : ĠString , Ġp cost : ĠInt ) Ġ{ ĊĠĠĠ Ġmap . edges [ start ]?. forEach Ġ{ Ġnode , Ġcost Ġ-> ĊĠĠĠĠĠ Ġbreadcrumb s . put ( node , ĠPair ( start , Ġp cost Ġ+ Ġcost )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnext Node (): ĠPair < String , ĠInt >? Ġ{ ĊĠĠĠ Ġif Ġ( breadcrumbs . size Ġ== Ġ 0 ) Ġreturn Ġnull ĊĊĠĠĠ Ġvar Ġfound Ġ= Ġ"" ĊĠĠĠ Ġvar Ġcost Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġbreadcrumb s ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġm Ġ-> Ġvisited . indexOf ( m . key ) Ġ< Ġ 0 Ġ} ĊĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( node , Ġpair ) Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( pair . second Ġ< Ġcost ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġnode ĊĠĠĠĠĠĠĠĠĠ Ġcost Ġ= Ġpair . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( cost Ġ== ĠInt . MAX _ VALUE ) Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠPair ( found , Ġcost ) ĊĠ Ġ} ĊĊĠ Ġfun Ġfind Path ( root : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġmap . get Nodes (). size Ċ Ċ // ĠĠĠ Ġwhile Ġ( visited . size Ġ< Ġsize ) Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġ( node , Ġcost ) Ġ= Ġnext Node ( root ) Ċ // ĠĠĠĠĠ Ġgo Forward ( node , Ġcost ) Ċ // ĠĠĠĠĠ Ġvisited . add ( node ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġvisited . toList () ĊĠ Ġ} Ċ Ċ }