package Ġchapter 4 . section 1 Ċ Ċ import Ġchapter 3 . section 3 . Red Black B ST Ċ import Ġedu . pr inc et on . cs . al gs 4 . In Ċ import Ġedu . pr inc et on . cs . al gs 4 . Stack Ċ import Ġedu . pr inc et on . cs . al gs 4 . Std Draw Ċ Ċ /** Ċ Ġ* Ġ ç¼ĸåĨĻ ä¸Ģ æ®µ ç¨ĭåºı B acon Histogram ï¼Į æīĵåį° ä¸Ģ åī¯ K evin ĠB acon æķ° çļĦ æŁ ± çĬ¶ åĽ¾ ï¼Į Ċ Ġ* Ġ æĺ¾ç¤º movies . txt ä¸Ń K evin ĠB acon æķ° ä¸º 0 ãĢģ 1 ãĢģ 2 ãĢģ 3 âĢ¦âĢ¦ çļĦ æ¼Ķ åĳĺ åĪĨåĪ« æľī å¤ļå°ĳ ãĢĤ Ċ Ġ* Ġå°Ĩ åĢ¼ä¸º æĹł ç© · å¤§ çļĦäºº ï¼Ī ä¸į ä¸İ K evin ĠB acon è¿ŀ éĢļ ï¼ī å½Ĵ ä¸º ä¸Ģ ç±» ãĢĤ Ċ Ġ* Ċ Ġ* Ġ è§£ ï¼ļ åĽłä¸º è¦ģæ±Ĥ çļĦæĺ¯ æ¼Ķ åĳĺ çļĦ K evin ĠB acon æķ° ï¼Į æīĢä»¥ åľ¨ çĶ¨ å¹¿ åº¦ ä¼ĺåħĪ æĲľç´¢ éģįåİĨ åĽ¾ æĹ¶ ï¼Į éľĢè¦ģ æĮī å±Ĥ ç»Łè®¡ æ¯ı å±Ĥ çļĦ æ¼Ķ åĳĺ æķ°éĩı Ċ Ġ* Ġåı¯ä»¥ åıĤèĢĥ ç»ĥ ä¹ł 4 . 1 . 1 4 ä¸Ń çĶ¨ ä¸¤ä¸ª æłĪ æĽ¿ ä»£ éĺŁåĪĹ çļĦ å¹¿ åº¦ ä¼ĺåħĪ æĲľç´¢ æĸ¹æ³ķ ï¼Į è¾ĵåħ¥ æłĪ æİĴ ç©º æĹ¶ ï¼Į ä¸Ģ å±Ĥ éģįåİĨ ç»ĵæĿŁ Ċ Ġ*/ Ċ class ĠB acon Histogram Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsg Ġ= ĠSymbol Graph ("./ data / movies . txt ", Ġ"/") ĊĠĠĠ Ġprivate Ġval Ġgraph Ġ= Ġsg . G () ĊĠĠĠ Ġprivate Ġval Ġmarked Ġ= ĠBoolean Array ( graph . V ) ĊĠĠĠ Ġprivate Ġvar Ġactor Num Ġ= Ġ 0 Ġ// Ġ è®°å½ķ æ¼Ķ åĳĺ çļĦ æĢ» æķ° ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSymbol Graph ä¸Ń æ²¡æľī åĮº åĪĨ æ¼Ķ åĳĺ åĴĮ çĶµ å½± ï¼Į èĢĮä¸Ķ çĶ±äºİ åı¯èĥ½ åŃĺåľ¨ ä¸į è¿ŀ éĢļ çļĦ é¡¶ çĤ¹ ï¼Į ä¸įèĥ½ çĶ¨ äºĮ åĪĨ åĽ¾ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠ Ġ// Ġ éĩįæĸ° éģįåİĨ æĸĩä»¶ ï¼Į ç»Łè®¡ æ¼Ķ åĳĺ æĢ» æķ° ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠIn ("./ data / movies . txt ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( input . hasNext Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġinput . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġline . split ("/") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġitems . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġsg . index ( items [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! marked [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarked [ index ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmarked . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarked [ i ] Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġb st Ġ= ĠRed Black B ST < Int , ĠInt >() Ġ// Ġ è®°å½ķ K evin ĠB acon æķ° åĴĮ æķ°éĩı çļĦ å¯¹åºĶ åħ³ç³» ĊĠĠĠ Ġprivate Ġvar Ġmax Actor Num Ġ= Ġ 0 Ġ// Ġ è®°å½ķ æīĢæľī K evin ĠB acon æķ° ä¸Ń æľĢ å¤ļ çļĦ æ¼Ķ åĳĺ æķ°éĩı ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġsg . index (" B acon , ĠKevin ") ĊĠĠĠĠĠĠĠ Ġvar Ġinput Stack Ġ= ĠStack < Int >() ĊĠĠĠĠĠĠĠ Ġvar Ġoutput Stack Ġ= ĠStack < Int >() ĊĠĠĠĠĠĠĠ Ġinput Stack . push ( s ) ĊĠĠĠĠĠĠĠ Ġmarked [ s ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġis Actor Ġ= Ġfalse Ġ// Ġ æłĩè®° å½ĵåīį éģįåİĨ çļĦæĺ¯ æ¼Ķ åĳĺ è¿ĺæĺ¯ çĶµ å½± ĊĠĠĠĠĠĠĠ Ġvar Ġdegrees Ġ= Ġ 0 Ġ// åº¦ æķ° ĊĠĠĠĠĠĠĠ Ġb st . put ( degrees , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġdegrees ++ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! input Stack . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġinput Stack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . adj ( v ). forEach Ġ{ Ġw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! marked [ w ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarked [ w ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Stack . push ( w ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Stack . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Actor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb st . put ( degrees , Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdegrees ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Actor Ġ= Ġ! is Actor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġinput Stack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Stack Ġ= Ġoutput Stack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Stack Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġb st . keys (). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġb st . get ( key ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġmax Actor Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Actor Num Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnot Connected Actor Num Ġ= Ġactor Num Ġ- Ġcount ĊĠĠĠĠĠĠĠ Ġif Ġ( not Connected Actor Num Ġ> Ġmax Actor Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Actor Num Ġ= Ġnot Connected Actor Num ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb st . put ( Int . MAX _ VALUE , Ġnot Connected Actor Num ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġåı¯ ç»ĺ åĪ¶ åĮºåŁŁ çļĦ å·¦ è¾¹ çķĮ åĴĮ ä¸ĭ è¾¹ çķĮ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLEFT Ġ= Ġ 0 . 0 5 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBOTTOM Ġ= Ġ 0 . 0 5 ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸Ģ æĿ¡ æķ°æį® å·¦ åı³ è¾¹ è·Ŀ çĻ¾ åĪĨ æ¯Ķ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM ARGIN _ PERCENT Ġ= Ġ 0 . 1 ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ æĸĩåŃĹ æĹ¶çļĦ éĹ´ è·Ŀ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTEXT _ M ARGIN Ġ= Ġ 0 . 0 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġ 1 . 0 Ġ/ Ġb st . size () Ġ* Ġ( 1 Ġ- ĠLEFT Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġdraw Width Ġ= Ġwidth Ġ* Ġ( 1 Ġ- ĠM ARGIN _ PERCENT Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠStd Draw . clear () ĊĠĠĠĠĠĠĠ ĠStd Draw . set Pen Color () ĊĠĠĠĠĠĠĠ ĠStd Draw . line ( LEFT , ĠBOTTOM , Ġ 1 Ġ- ĠLEFT , ĠBOTTOM ) ĊĠĠĠĠĠĠĠ ĠStd Draw . line ( LEFT , ĠBOTTOM , ĠLEFT , Ġ 1 Ġ- ĠBOTTOM ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġb st . keys (). forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġb st . get ( key ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( i Ġ+ Ġ 0 . 5 ) Ġ* Ġwidth Ġ+ ĠLEFT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġvalue . toDouble () Ġ/ Ġmax Actor Num Ġ* Ġ( 1 Ġ- ĠBOTTOM Ġ* Ġ 2 ) Ġ/ Ġ 2 Ġ+ ĠBOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Width Ġ= Ġdraw Width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhalf Height Ġ= Ġvalue . toDouble () Ġ/ Ġmax Actor Num Ġ* Ġ( 1 Ġ- ĠBOTTOM Ġ* Ġ 2 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStd Draw . filled Rectangle ( x , Ġy , Ġhalf Width , Ġhalf Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStd Draw . text ( x , ĠBOTTOM Ġ- ĠTEXT _ M ARGIN , Ġif Ġ( key Ġ== ĠInt . MAX _ VALUE ) Ġ" not Ġconnected " Ġelse Ġkey . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStd Draw . text ( x , Ġy Ġ+ Ġhalf Height Ġ+ ĠTEXT _ M ARGIN , Ġvalue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠB acon Histogram (). draw () Ċ }