锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一级久久久久久久大片,久久综合亚洲色一区二区三区,91久久精品国产91性色也http://m.shnenglu.com/zzfmars/category/14312.html琛岃儨浜庤█錛屽琛屾棤鐩婏紝鎬濅負(fù)琛屽厛銆傛湁鎵涓猴紝鏈夋墍涓嶄負(fù)銆?/description>zh-cnSat, 21 Aug 2010 13:16:59 GMTSat, 21 Aug 2010 13:16:59 GMT60pku1077http://m.shnenglu.com/zzfmars/articles/124209.htmlKevin_ZhangKevin_ZhangSat, 21 Aug 2010 11:57:00 GMThttp://m.shnenglu.com/zzfmars/articles/124209.htmlhttp://m.shnenglu.com/zzfmars/comments/124209.htmlhttp://m.shnenglu.com/zzfmars/articles/124209.html#Feedback0http://m.shnenglu.com/zzfmars/comments/commentRss/124209.htmlhttp://m.shnenglu.com/zzfmars/services/trackbacks/124209.htmlhttp://blog.163.com/sentimental_man/blog/static/73001618200881405851176/
綆浠嬶細(xì)
         鎵璋撳叓鏁扮爜闂鏄寚榪欐牱涓縐嶆父鎴忥細(xì)灝嗗垎鍒爣鏈夋暟瀛?錛?錛?錛?#8230;錛?鐨勫叓鍧楁鏂瑰艦鏁扮爜鐗屼換鎰忓湴鏀懼湪涓鍧?×3鐨勬暟鐮佺洏涓娿傛斁鐗屾椂瑕佹眰涓嶈兘閲嶅彔銆備簬鏄紝鍦?×3鐨勬暟鐮佺洏涓婂嚭鐜頒簡涓涓┖鏍箋傜幇鍦ㄨ姹傛寜鐓ф瘡嬈″彧鑳藉皢涓庣┖鏍肩浉閭?cè)潥勬暟鐮佺墝涓幗I烘牸浜ゆ崲鐨勫師鍒欙紝灝嗕換鎰忔憜鏀劇殑鏁扮爜鐩橀愭鎽嗘垚鏌愮鐗規(guī)畩鐨勬帓鍒椼傚涓嬪浘琛ㄧず浜嗕竴涓叿浣撶殑鍏暟鐮侀棶棰樻眰瑙c?br>
闂鍒嗘瀽錛?/span>
         棣栧厛錛屽叓鏁扮爜闂鍖呮嫭涓涓垵濮嬬姸鎬?START) 鍜岀洰鏍囩姸鎬?END)錛屾墍璋撹В鍏暟鐮侀棶棰樺氨鏄湪涓や釜鐘舵侀棿瀵繪壘涓緋誨垪鍙繃娓$姸鎬侊紙START->STATE1->STATE2->...->END錛夈傝繖涓姸鎬佹槸鍚﹀瓨鍦ㄥ氨鏄垜浠瑙e喅鐨勭涓涓棶棰橈細(xì)

Q1錛氭瘡涓涓姸鎬佸強(qiáng)姣忎竴嬈℃搷浣滅殑琛ㄧず鏂規(guī)硶錛?/span>
         鏈夎澶氳〃紺烘柟娉曪紝姣斿涓涓?*3鐨勫叓鏁扮爜鐩樺彲浠ュ帇緙╂垚涓涓猧nt鍊艱〃紺猴紝浣嗕笉閫傜敤浜?5 puzzle鎴栧ぇ浜? 鐨刾uzzle闂銆傚鏋滃絀洪棿瑕佹眰寰堥珮錛屽簲璇ヨ繕鍙互鍐嶅帇緙┿傛湰鏂囬噰鐢ㄤ竴涓猧nt琛ㄧず鐨勬柟娉曘?br>         琛ㄧず鏂規(guī)硶濡備笅錛氱敱浜巌nt鐨勮〃紺鴻寖鍥村ぇ浜?e9錛屾墍浠ユ垜浠彇涓涓猧nt鐨勪綆9浣嶏紝涓轟簡鏂逛究瀵繪壘絀烘牸鐨勪綅緗紝int鐨勪釜浣嶆垜浠敤鏉ユ斁絀烘牸鐨勪綅緗紙1-9錛夈傝屽墠8浣嶏紝鎸夌収琛屼粠涓婂埌涓嬶紝鍒椾粠宸﹀埌鍙崇殑欏哄簭渚濇璁板綍瀵瑰簲浣嶇疆涓婄殑鏁板瓧銆備緥濡傦細(xì)
         鍙互琛ㄧず鎴?2 3 1 5 8 4 6 7 5 錛屼釜浣嶇殑5琛ㄧず絀烘牸鍦ㄧ5浣嶏紝鍓嶅叓浣嶆暟鎸夐『搴忚褰曘傚潗鏍囪漿鎹㈠叕寮忎負(fù)錛?br>     num錛堝帇緙╁悗鐨刬nt錛?x y錛堟眰x琛寉鍒?1璁拌搗錛?e(n)涓?1涔?0鐨刵嬈?br>     int temp=(x-1)*3+y
     if   temp > num%10 then return (num / 1e(9-temp+1)) %10
     else return (num / 1e(9-temp) )%10

     涓轟簡鏂逛究鏈枃浠嬬粛錛屽彇鐩爣鐘舵佷負(fù)錛? 2 3 4 5 6 7 8 9 鍗?->

         鎿嶄綔鏈枃鐢?u r d l 鍒嗗埆琛ㄧず 絀烘牸鐨勫悜涓?鍚戝彸 鍚戜笅鍚戝乏鍥涗釜鎿嶄綔銆傛瘮濡傦紝鍦ㄧ畝浠嬩腑鐨勫浘鍖呮嫭涓ゆ鎿嶄綔 l d 錛屽彲鑳戒笌騫蟲椂鐜╄繖綾繪父鎴忕殑涔?fàn)鎯笉绗﹀悎锛屼絾杩欐槸湄?fù)浜嗗拰ACM渚嬮鐩哥粺涓銆?br>
     瀵瑰簲鍦幫紝姣忕鎿嶄綔寮曡搗鐨勭姸鎬佸彉鍖栧涓嬶細(xì)
     r 錛歯um鍊?+              l 錛歯um鍊?-
     u 錛氭湁鐐瑰鏉?br>     int t0 = 9-num%10 + 1
     int t1 = num / 1e(t0)
     int t2 = t1%1000
     t1= t1- t2 + (t2 % 100) * 10 + t2 / 100
     t1*= 1e(t0)
     return (t1 + ( (num % t0) - 3))
     d 錛歳eturn鍓嶉潰鍚寀鎿嶄綔錛?return榪斿洖   (t1 + ( (num % t0) + 3))

Q2錛氬垽鏂槸鍚﹀瓨鍦ㄤ腑闂寸姸鎬佷嬌START 鍒拌揪END錛?/span>
         鐢ㄧ粍鍚堟暟瀛︾殑鏂規(guī)硶鍙互蹇熷湴榪涜鍒ゆ柇錛屼緥濡係OJ 2061棰?2360棰樹腑閮芥槸鍏充簬姝ょ被鐨勯棶棰樸備絾鍏暟鐮佺殑鍒ゆ柇鏂規(guī)硶姣斾粬浠畝鍗曞浜嗐?br>
         鏈枃鐢ㄧ殑鏂規(guī)硶鏄綆楁帓鍒楃殑閫嗗簭鏁板鹼紝浠? 3 1 5 8 4 6 7 5 涓轟緥瀛愶紝5琛ㄧず鐨勬槸絀烘牸錛屼笉璁$畻錛岄偅涔堟眰23158467 鐨勯嗗簭鍊間負(fù)
         0 + 0 + 2 (1<2 1<3 ) + 0 + 0 + 1 ( 4<5 ) + 1 ( 6<8 ) + 1 ( 7<8 ) = 5
鐩爣鐘舵? 2 3 4 5 6 7 8 9 鐨勯嗗簭鑷劧灝辨槸0銆?br>
涓や釜鐘舵佷箣闂存槸鍚﹀彲杈撅紝鍙互閫氳繃璁$畻涓よ呯殑閫嗗簭鍊鹼紝鑻ヤ袱鑰呭鍋舵х浉鍚屽垯鍙揪錛屼笉鐒朵袱涓姸鎬佷笉鍙揪銆?br>
綆鍗曡瘉鏄庝竴涓嬶細(xì)
         l 鍜?r 鎿嶄綔錛屼笉浼?xì)濯勫搷鐘舵佺殑閫嗗簭鍊鹼紝鍥犱負(fù)鍙細(xì)鏀瑰彉涓綅鏁幫紙絀烘牸鐨勪綅緗級銆?br>         u鍜宒鎿嶄綔鏄嬌鏌愪釜浣嶇疆鐨勬暟瀛?鍙?宸︾Щ涓や綅銆傜敱浜庢暟瀛楀簭鍒楃殑姣忎竴嬈$Щ鍔ㄤ細(xì)浣塊嗗簭鍊煎鍋舵ф敼鍙橈紝鎵浠?nbsp;            縐誨姩涓ゆ鍚庡鍋舵т笉鍙樸?br>         鎵浠ュ洓涓搷浣滃潎涓嶄細(xì)褰卞搷搴忓垪鐨勫鍋舵с?br>
Q3錛氬浣曞鎵句竴緋誨垪鐨勪腑闂寸姸鎬佸強(qiáng)閬囧埌鐨勯棶棰橈紵
         瑕佸鎵捐繖涓緋誨垪涓棿鐘舵佺殑鏂規(guī)硶鏄悳绱紝浣嗘悳绱㈠緢瀹規(guī)槗閬囧埌鏃墮棿鍜岀┖闂翠笂鐨勯棶棰樸備互涓嬪氨鏄悳绱㈢殑鍩烘湰鍘熺悊錛?br>
         鐢? 3 7 2 4 6 8 5 2 鐘舵佸彲浠ヨ鐢熶笁涓姸鎬侊紝鍋囧閫夋嫨浜? 2 3 7 4 6 8 5 5 錛屽垯鍙堣鐢熶笁涓姸鎬侊紝緇х畫鎸夋煇絳栫暐榪涜閫夋嫨錛屼竴鐩村埌琛嶇敓鍑虹殑鏂扮姸鎬佷負(fù)鐩爣鐘舵丒ND 涓烘銆?br>瀹規(guī)槗鐪嬪嚭錛岃繖鏍風(fēng)殑鎼滅儲綾諱技浜庝粠鏍?wèi)鏍瑰紑濮嬪悜鑼庡啀鍚戝彾鎼滅儲鐩爣鍙跺瓙涓鏍風(fēng)殑鏍?wèi)鍨嬬姸銆傜敱浜庡叾瑙勬ā鐨勪笉鏂墿澶э紝鍏跺彾瀛愪篃鎰堝姞鑼傚瘑錛屾渶緇堢殑瑙勬ā浼?xì)澶у埌鏃犳硶鎺у埗銆傝繖鏍峰湪絀洪棿涓婁細(xì)澶уぇ鍔犲ぇ鎼滅儲闅懼害錛屽湪鏃墮棿涓婁篃瑕佹秷鑰楄澶氥?br>
鍦ㄦ櫘閫氭悳绱腑閬囧埌浠ヤ笅闂錛?br>        a   鎼滅儲涓槗鍑虹幇寰幆錛屽嵆璁塊棶鏌愪竴涓姸鎬佸悗鍙堟潵璁塊棶璇ョ姸鎬併?br>        b 鎼滅儲璺緞涓嶄匠渚挎棤娉曞緱鍒拌緝濂界殑涓棿鐘舵侀泦錛堝嵆涓棿鐘舵侀泦鐨勫厓绱犳暟閲忚繃澶э級銆?br>        c 鎼滅儲榪囩▼涓闂簡榪囧鐨勬棤鐢ㄧ姸鎬侊紝榪欎簺鐘舵佸鏈鍚庣殑緇撴灉鏃犲府鍔┿?br>

         浠ヤ笂涓変釜闂涓紝a涓鴻嚧鍛介棶棰橈紝搴旇瀹冨彲鑳藉鑷寸▼搴忔寰幆錛沚鍜宑鏄潪鑷村懡鐨勶紝浣嗚嫢涓嶅鐞嗗ソ鍙兘瀵艱嚧鎬ц兘鎬ュ墽涓嬮檷銆?br>

Q4錛氭庢牱閬垮厤閲嶅璁塊棶涓涓姸鎬侊紵
         鏈鐩存帴鐨勬柟娉曟槸璁板綍姣忎竴涓姸鎬佽闂惁錛岀劧鍚庡啀琛嶇敓鐘舵佹椂涓嶈鐢熼偅浜涘凡緇忚闂殑鐘舵佷簡銆傛濇兂鏄紝緇欐瘡涓姸鎬佹爣璁頒竴涓猣lag錛岃嫢璇ョ姸鎬乫lag = true鍒欎笉琛嶇敓錛岃嫢涓篺alse鍒欒鐢熷茍淇敼flag涓簍rue銆?br>鍦ㄦ煇浜涚畻娉曟弿榪伴噷錛岀О鏈変袱涓摼琛紝涓涓負(fù)媧婚摼琛紙寰呰闂級錛屼竴涓負(fù)姝婚摼琛紙璁塊棶瀹岋級銆傛瘡涓嬈¤鐢熺姸鎬佹椂錛屽厛鍒ゆ柇瀹冩槸鍚﹀凡鍦ㄤ袱涓摼琛ㄤ腑錛岃嫢瀛樺湪錛屽垯涓嶈鐢燂紱鑻ヤ笉瀛樺湪錛屽皢鍏舵斁鍏ユ椿閾捐〃銆傚浜庤琛嶇敓鐨勯偅涓姸鎬侊紝鏀懼叆姝婚摼琛ㄣ?br>
         涓轟簡璁板綍姣忎竴涓姸鎬佹槸鍚﹁璁塊棶榪囷紝鎴戜滑闇瑕佹湁瓚沖鐨勭┖闂淬傚叓鏁扮爜闂涓鍏辨湁9!錛岃繖涓暟瀛楀茍涓嶆槸寰堝ぇ錛屼絾榪庨潰鑰屾潵鐨勫彟涓涓棶棰樻槸鎴戜滑濡備綍蹇熻闂繖浜涚姸鎬侊紝濡傛灉鏄崟綰敤閾捐〃鐨勮瘽錛岄偅涔堝湪瑙勬ā鐩稿綋澶э紝鏌ユ壘鐨勭姸鎬佹暟鐩崄鍒嗗鐨勬椂鍊欏氨涓嶈兘蹇熸壘鍒扮姸鎬侊紝鍏跺鏉傚害涓篛(n),涓轟簡瑙e喅榪欎釜闂錛屾湰鏂囧皢閲囩敤鍝堝笇鍑芥暟鐨勬柟娉曪紝浣垮鏉傚害鍑忎負(fù)O(1)銆?br>         榪欓噷鐨勫搱甯屽嚱鏁版槸鐢ㄨ兘瀵硅澶氬叏鎺掑垪闂閫傜敤鐨勬柟娉曘傚彇n!涓哄熀鏁幫紝鐘舵佺n浣嶇殑閫嗗簭鍊間負(fù)鍝堝笇鍊肩n浣嶆暟銆傚浜庣┖鏍鹼紝鍙栧叾錛?-浣嶇疆錛夊啀涔樹互8!銆備緥濡傦紝1 3 7 2 4 6 8 5 8 鐨勫搱甯屽肩瓑浜庯細(xì)
0*0! + 0*1! + 0*2! + 2*3! + 1*4! + 1*5! + 0*6! + 3*7! + (9-8)*8! = 55596 <9!

         鍏蜂綋鐨勫師鍥犲彲浠ュ幓鏌ユ煡涓浜涙暟瀛︿功錛屽叾涓? 2 3 4 5 6 7 8 9 鐨勫搱甯屽兼槸0 鏈灝忥紝8 7 6 5 4 3 2 1 0 鐨勫搱甯屽兼槸錛?!-1錛夋渶澶э紝鑰屽叾浠栧奸兘鍦? 鍒幫紙9!-1錛?涓紝涓斿潎鍞竴銆?br>
Q5錛氬浣曚嬌鎼滅儲鍙眰寰楁渶浣崇殑瑙o紵
         鏅氱殑鎼滅儲縐頒負(fù)DFS錛堟繁搴︿紭鍏堟悳绱級銆傞櫎浜咲FS錛岃繕鏈塀FS錛屼粠姒傚康涓婅錛屼袱鑰呭彧鏄湪鎵╁睍鏃剁殑鏂瑰悜涓嶅悓錛孌FS鍚戞繁鎵╁紶錛岃孊FS鍚戝箍鎵╁紶銆傚湪鍏暟鐮侀棶棰樼殑瑙i泦鏍?wèi)涓Q屾爲(wèi)鐨勬繁搴﹀氨琛ㄧず浜嗕粠鍒濆鎬佸埌鐩爣鎬佺殑姝ユ暟錛孌FS涓鍛沖悜娣憋紝鎵浠ュ緢瀹規(guī)槗鎵懼嚭娣卞害杈冨ぇ鐨勮В銆?br>         BFS鍙互淇濊瘉瑙g殑娣卞害鏈灝戯紝鍥犱負(fù)鍦ㄦ湭灝嗗悓涓娣卞害鐨勭姸鎬佸叏閮ㄨ闂畬鍓嶏紝BFS涓嶄細(xì)鍘昏闂洿娣辯殑鐘舵侊紝鍥犳姣旇緝閫傚悎鍏暟鐮侀棶棰橈紝鑷沖皯鑳借В鍐蟲眰鏈浣寵В鐨勯毦棰樸?br>
         浣嗘槸BFS鍜孌FS涓鏍蜂笉鑳借В鍐抽棶棰榗 錛屽洜涓烘瘡涓姸鎬侀兘闇瑕佹墿寮狅紝鎵浠ュ箍鎼滃緢瀹規(guī)槗浣垮緟鎼滅姸鎬佺殑鏁扮洰鑶ㄨ儉銆傛渶緇堝獎鍝嶆晥鐜囥?br>

Q6錛氳濡備綍鍑忓皯鍥犲箍鎼滄墍鎵╁紶鐨勪笌鐩爣鐘舵佸強(qiáng)瑙f棤鍏崇殑鐘舵侊紵
         鍓嶉潰鎵璇寸殑閮芥槸浠嶴TART鐘舵佸悜END鐘舵佹悳绱紝閭d箞錛屽皢END鐘舵佷笌START鐘舵佸掍竴涓嬶紝鍏跺疄浼?xì)鏈夊彟涓鏉℃悳绱㈣礬寰勶紙Q8絳栫暐涓夎璁猴級錛屼絾綆鍗曠殑浜ゆ崲END涓嶴TART騫朵笉鑳界緝?yōu)畯鐘舵佽啫鑳鐨勮妯°傛垜浠彲浠ュ皢姝e悜涓庡弽鍚戠殑鎼滅儲緇撳悎璧鋒潵錛岃繖灝辨槸鍙屽悜騫垮害鎼滅儲銆?br>         鍙屽悜騫挎悳鏄寚鍚屾椂浠嶴TART鍜孍ND涓ょ鎼滐紝褰撴煇涓绔墍瑕佽闂殑涓涓姸鎬佹槸琚彟涓绔闂繃鐨勬椂鍊欙紝鍗蟲壘鍒拌В錛屾悳绱㈢粨鏉熴傚畠鐨勫ソ澶勬槸鍙互閬垮厤騫挎悳鍚庢湡鐘舵佺殑鑶ㄨ儉銆?br>閲囩敤鍙屽悜騫垮害鎼滅儲鍙互灝嗙┖闂村拰鏃墮棿鑺傜渷涓鍗婏紒


Q7錛氬喅瀹氫竴涓揩鐨勬绱㈢瓥鐣ワ紵
         鍙屽悜騫挎悳鑳藉ぇ澶у噺灝戞椂闂村拰絀洪棿錛屼絾鍦ㄦ湁鐨勬儏鍐典笅鎴戜滑騫朵笉闇瑕佺┖闂寸殑鑺傜渷錛屾瘮濡傚湪Q4涓凡緇忓喅瀹氫簡鎴戜滑闇瑕佷嬌鐢ㄧ殑絀洪棿鏄?錛侊紝鎵浠ヤ笉闇瑕佽妭鐪併傝繖鏍鋒垜浠彲浠ユ妸閲嶇偣鏀懼湪鏃墮棿鐨勭緝鐭笂銆?br>         鍚彂寮忔悳绱㈡槸鍦ㄨ礬寰勬悳绱㈤棶棰樹腑寰堝疄鐢ㄧ殑鎼滅儲鏂瑰紡錛岄氳繃璁捐涓涓ソ鐨勫惎鍙戝紡鍑芥暟鏉ヨ綆楃姸鎬佺殑浼樺厛綰э紝浼樺厛鑰冭檻浼樺厛綰ч珮鐨勭姸鎬侊紝鍙互鎻愭棭鎼滅儲鍒拌揪鐩爣鎬佺殑鏃墮棿銆侫*鏄竴縐嶅惎鍙戝紡鎼滅儲鐨勶紝浠栫殑鍚彂寮忓嚱鏁癴 ' ()=g' () + h' () 鑳藉搴旂敤鍒板叓鏁扮爜闂涓潵銆?br>         g' () ----- 浠庤搗濮嬬姸鎬佸埌褰撳墠鐘舵佺殑瀹為檯浠d環(huán)g*()鐨勪及璁″鹼紝g' () >= g*()
         h' () ----- 浠庡綋鍓嶇姸鎬佸埌鐩爣鐘舵佺殑瀹為檯浠d環(huán)h*()鐨勪及璁″鹼紝h' () <= h*()
娉ㄦ剰涓や釜闄愬埗鏉′歡錛?br>         錛?錛塰' () <= h*()   錛?錛変換鎰忕姸鎬佺殑f '()鍊煎繀欏誨ぇ浜庡叾鐖剁姸鎬佺殑f '()鍊鹼紝鍗砯 '()鍗曡皟閫掑銆?br>
         鍏朵腑錛実' () 鏄悳绱㈢殑娣卞害錛?h' () 鍒欐槸涓涓及璁″嚱鏁幫紝鐢ㄤ互浼拌褰撳墠鎬佸埌鐩爣鎬佸彲鑳界殑姝ユ暟銆傝В鍏暟鐮侀棶棰樻椂涓鑸湁涓ょ浼拌鍑芥暟銆傛瘮杈冪畝鍗曠殑鏄痙ifference ( Status a,   Status b )錛?鍏惰繑鍥炲兼槸a 鍜宐鐘舵佸悇浣嶇疆涓婃暟瀛椾笉鍚岀殑嬈℃暟銆傚彟涓縐嶆瘮杈冪粡鍏哥殑鏄浖鍝堥】璺濈    manhattan ( Status a, Status b )錛屽叾榪斿洖鐨勬槸鍚勪釜鏁板瓧浠巃鐨勪綅緗埌b鐨勪綅緗殑璺濈錛堣渚嬪瓙錛夈?br>
渚嬪鐘舵?1 3 7 2 4 6 8 5 2 鍜岀姸鎬?1 2 3 4 5 6 7 8 9 鐨刣ifference 鏄?錛堜笉鍚┖鏍鹼級銆傝屼粬鐨刴anhattan 璺濈鏄細(xì)
1 (7d涓嬈? + 1 (2u涓嬈? + 2 (4l涓ゆ) + 3 (6r涓ゆu涓嬈? + 2 (5u涓嬈涓嬈? = 9
鍗曚釜鏁板瓧鐨刴anhattan搴旇灝忎簬5錛屽洜涓哄瑙掔殑璺濈鎵?錛岃嫢澶т簬4鍒欒鏄庤綆楁湁璇?br>
         鏃犺鏄痙ifference榪樻槸manhattan錛屼及璁′負(fù)瓚婂皬瓚婃帴榪慐ND錛屾墍浠ヤ紭鍏堢駭楂樸?br>         鍦ㄨ綆梔ifference鍜宮anhattan鏃訛紝鎺ㄨ崘閮藉皢絀烘牸蹇界暐錛屽洜涓哄湪difference涓┖鏍煎彲鏈夊彲鏃狅紝瀵規(guī)暣浣撴悳绱㈠獎鍝嶄笉澶с?br>
         鏈枃鍚庨潰鐨勫疄鐜板皢浣跨敤manhattan 涓嶈絀烘牸鐨勬柟娉曘傚叾瀹烇紝姣忕Щ鍔ㄤ竴姝ワ紝涓嶈絀烘牸錛岀浉褰撲簬縐誨姩涓涓暟瀛椼傚鏋滄瘡嬈$Щ鍔ㄩ兘鏄畬緹庣殑錛屽嵆鎶婁竴涓暟瀛楀綊浣嶏紝閭d箞START鎬佸埌END鎬佺殑璺濈灝辨槸manhattan銆傚弽榪囨潵璇達(dá)紝manhattan鏄疭TART鍒癊ND鎬佺殑鑷沖皯璧扮殑姝ユ暟銆?br>         鍥炲埌f '()=g' ()+ h' ()錛屽叾瀹炲箍搴︽悳绱㈡槸h' ()=0鐨勪竴縐嶅惎鍙戝紡鎼滅儲鐨勭壒渚嬶紝鑰屾繁搴︽悳绱㈡槸    f ' ()=0 鐨勪竴鑸悳绱€俬' ()瀵逛簬浼樺寲鎼滅儲閫熷害鏈夊緢閲嶈鐨勪綔鐢ㄣ?br>
Q8錛氳兘鍚﹁繘涓姝ヤ紭鍖栨绱㈢瓥鐣ワ紵
         絳旀鏄偗瀹氱殑銆?br>         A*鎼滅儲絳栫暐鐨勪紭鍔e氨鏄湅h' ()鐨勫喅瀹氬ソ鍧忋傚墠闈㈠垪涓句簡涓や釜h' ()鐨勫嚱鏁幫紝浣嗗厜鏈夎繖涓や釜鏄笉澶熺殑銆傜粡榪囧疄楠屽垎鏋愶紝鍦╢ '()涓紝g '()鍐沖畾鐨勬槸START鎬佸埌END鎬佷腑姹傚緱鐨勮В璺濈鏈浼樿В鐨勮窛紱匯?鑰宧' () 鑳藉獎鍝嶆悳绱㈢殑閫熷害銆?br>         鎵浠ヤ紭鍖栫殑絎竴鏉$瓥鐣ユ槸錛屾斁澶' ()錛屾瘮濡傦紝璁﹉ '()= 10* manhattan()錛岄偅涔坒 '()= g' ()+10*manhattan()錛屽彲鑳芥彁楂樻悳绱㈤熷害銆傚彲鎯滅殑鏄墍寰楃殑瑙e皢涓嶅啀浼?xì)鏄渶浼樼殑浜嗐?br>         涓轟粈涔堟斁澶'()鑳藉姞蹇悳绱㈤熷害錛屾垜浠彲浠ユ兂璞′竴涓嬶紝h'()鎻忚堪鐨勬槸鏈姸鎬佸埌END鎬佺殑浼拌璺濈錛屼及璁¤窛紱昏秺鐭嚜鐒跺揩涓鐐瑰埌杈綞ND鎬併傝?g' ()鎻忚堪鐨勬槸鐩墠鐨勬繁搴︼紝鏀懼ぇh' ()鐨勭洰鐨勬槸灝介噺蹇界暐娣卞害鐨勫洜绱狅紝鏄竴縐嶅甫絳栫暐鐨勬繁鎼滐紝鑷劧閫熷害浼?xì)姣旘q挎悳鍜屾繁鎼滈兘蹇紝鑰屽洜涓哄噺灝戣冭檻浜嗘繁搴﹀洜绱狅紝鎵浠ョ鏈浼樿В灝辮秺鏉ヨ秺榪滀簡銆傚叧浜巋' ()鏀懼ぇ澶氬皯錛屾槸寰堟湁瓚g殑闂錛屾湁鍏磋叮鍙互鍋氫簺瀹為獙璇曡瘯銆?br>
         絎簩鏉℃槸鏇存柊寰呮鏌ョ殑鐘舵侊紝鐢變簬A*鎼滅儲浼?xì)闇瑕佷竴涓緟媯鏌ョ殑搴忓垪銆傞鍏堬紝鍦≦4宸茬粡鎻愬埌鐢ㄥ搱甯岄伩鍏嶉噸澶嶈闂悓涓鐘舵併傝屽湪寰呮鏌ラ槦鍒椾腑鐨勭姸鎬佹槸鏈畬鎴愭墿寮犵殑鐘舵侊紝濡傛灉鍑虹幇浜嗙姸鎬佺浉鍚屼絾鍏秅 '()姣斿師g '()鍑鴻壊鐨勬儏鍐碉紝閭d箞鎴戜滑鏇村笇鏈涚殑鏄悳绱㈡柊鐘舵侊紝鑰屼笉鏄師鐘舵併傝繖鏍鳳紝鍦ㄥ緟媯鏌ラ槦鍒椾腑鍑虹幇閲嶅鐘舵佹椂錛屽彧闇鏇存柊鍏秅'() 灝卞彲浠ヤ簡銆?br>
         絎笁鏉℃槸娉ㄦ剰瀹炵幇紼嬪簭鐨勬柟娉曪紝鍦ㄨ搗鍒濇垜鐢╯ort鎺掑簭f '()鍚庡啀鎵懼嚭鏉冨兼渶澶х殑鐘舵侊紝鑰屽悗鍙戠幇鐢╩ake_heap瑕佹洿蹇傛兂涓鎯籌紝鐢變簬闇瑕佽闂殑鎺ョ偣杈冨錛屽緟璁塊棶闃熷垪涓澶ч偅涔堣嚜鐒跺弽澶嶆帓搴忓閫熷害浼?xì)鏈夊奖鍝嶅Q岃屽爢鎿嶄綔鍒欐瘮鎺掑簭鏇村ソ銆傚彟涓鐐規(guī)槸錛屽疄鐜版洿鏂板緟媯鏌ラ槦鍒楁椂鐨勬悳绱篃瑕佺敤姣旇緝濂界殑鏂規(guī)硶瀹炵幇銆傛垜鍦↗AVA鐨勬紨紺虹▼搴忎腑鐢ㄧ殑PriorityQueue錛屽彲鏄粨鏋滀笉鏄緢浠や漢婊℃剰銆?br>
         絎洓鏉′紭鍖栫瓥鐣ユ槸浣跨敤IDA*鐨勭畻娉曪紝榪欐槸A*綆楁硶鐨勪竴縐嶏紝ID鍚嶄負(fù)Iterative deepening鏄凱浠e姞娣辯殑鎰忔濄傛濇兂鏄涓嬶細(xì)
欏轟究鍑嗗涓涓褰曚竴嬈″驚鐜渶灝忓肩殑temp=MAX, h' 鍙?manhattan璺濈
     鍏堜及綆椾粠START鎬佸埌END鎬佺殑h'() 璁板綍涓篗IN錛屽皢START鏀懼叆寰呰闂槦鍒?br>     璇誨彇闃熷垪涓嬩竴涓姸鎬侊紝鍒伴槦鍒楀熬鍒橤OTO鈶?br>     鑻'() > MIN GOTO 鈶?br>     鑻'() + h'()   > MIN 鏄惁涓虹湡錛岀湡GOTO 鈶ワ紝鍚?GOTO 鈶?br>     鎵╁睍璇ョ姸鎬侊紝騫舵爣璁版鐘舵佸凡璁塊棶銆傛壘鍒癊ND鎬佺殑璇濆氨緇撴潫璇ョ畻娉曘侴OTO 鈶?br>     temp = min(manhattan , temp),GOTO 鈶?br>     鑻ユ棤鎵╁睍榪囩姸鎬侊紝MIN=temp 錛圛D鐨勬剰鎬濆湪榪欓噷浣撶幇錛変粠澶村紑濮嬪驚鐜疓OTO 鈶?br>
         絎簲鏉′紭鍖栫瓥鐣ユ湰韜笌鎼滅儲鏃犲叧錛屽湪鍋氶鏃朵篃娌¤兘甯笂蹇欙紝涓嶈繃浠庣悊璁轟笂璁叉槸鏈夊弬鑰冧環(huán)鍊肩殑銆傝寰桻6涓粙緇嶇殑浠嶦ND寮濮嬫悳璧峰悧錛熷鏋滄垜浠殑浠誨姟鏄澶氫釜START 涓嶦ND榪涜鎼滅儲錛岄偅涔堟垜浠彲浠ュ湪姣忔悳绱㈠畬涓嬈″悗璁板綍涓嬭礬寰勶紝榪欎釜璺緞寰堥噸瑕侊紝鍥犱負(fù)鍦ㄤ互鍚庣殑鎼滅儲涓鏋滃瓨鍦⊿TART鍜孍ND鐨勮礬寰勫凡緇忚璁板綍榪囦簡錛岄偅涔堝彲浠ョ洿鎺ヨ皟鍑虹粨鏋溿?br>         浠嶦ND鎼滆搗錛屽彲浠ユ柟渚垮垽鏂笅涓嬈$殑START鏄惁宸茬粡鏈夎礬寰勫埌END浜嗐傚綋鍓嶄竴嬈℃悳绱㈠畬鏃訛紝鍏跺凡璁塊棶鐘舵佹槸鍙互鐩存帴浣跨敤鐨勶紝鑻TART涓嶅湪鍏朵腑錛屽垯浠庡緟璁塊棶鐨勭姸鎬侀摼琛ㄤ腑鎸夋悳绱㈢瓥鐣ユ壘涓嬩竴涓姸鎬侊紝絳変簬鎺ョ潃涓婁竴嬈$殑鎼滅儲緇撴灉寮濮嬫壘銆?br>         涔嬫墍浠ユ病鑳藉湪閫熷害涓婂府涓婂繖錛屾槸鍥犱負(fù)榪欎釜浼樺寲絳栫暐闇瑕佸姞澶' ()鐨勬瘮閲嶏紝鍚﹀垯寰堝鏄撳嚭鐜版繁搴︾浉褰撳ぇ鐨勬儏鍐碉紝鐢變簬鍓嶄竴嬈℃悳绱㈢殑絳栫暐涓庝笅涓嬈$殑鍩烘湰鏃犲叧錛屽鑷村墠涓嬈$殑璺緞鏃犳硶棰勬枡錛屾墍浠ュ氨浼?xì)鍑虹幇娣卞害杩囧ぇ鐨勬儏鍐点傝В鍐蟲柟娉曟槸鍔犲ぇg' ()銆?br>絳栫暐浜旂被浼肩粰紼嬪簭鍔犱竴涓紦鍐插尯錛岄伩鍏嶉噸澶嶈綆椼傚鏋滆鍋氬叓鏁扮爜鐨勫簲鐢紝緙撳啿鍖轟細(xì)甯笂蹇欑殑銆?br>
Q10錛氭庢牱璁板綍鎵懼埌鐨勮礬寰勶紵
         褰撴壘鍒拌В鐨勬椂鍊欐垜浠氨闇瑕佹湁綾諱技鍥為鐨勫伐浣滄潵鏁寸悊涓鏉¤В璺緞錛岀敱浜庝嬌鐢ㄤ簡涓嶆槸綆鍗曠殑DFS錛屾墍浠ヤ笉鑳藉熷姪閫氳繃鍑芥暟璋冪敤鎵鏄嬌鐢ㄧ殑紼嬪簭鏍堛?br>         鎴戜滑鍙互鎵嬪伐鍔犱竴涓ā鎷熸爤銆傚湪Q4涓В鍐充簡鍝堝笇鐨勯棶棰橈紝鍒╃敤鍝堝笇琛ㄥ氨鑳藉揩閫熻闂姸鎬佸搴旂殑鍊鹼紝鍦ㄨ繖閲岋紝鎴戜滑鎶婂師鏉ョ殑bool鍊兼敼涓篶har鎴栧叾浠栬兘琛ㄧず涓嬈℃搷浣滐紙鑷沖皯闇瑕?縐嶇姸鎬侊紝闄や簡u r l d 澶栬繕瑕佽兘琛ㄧず鐘舵佸凡璁塊棶錛夌殑鍊煎氨琛屼簡銆?br>         鍦ㄦ悳绱㈠埌瑙f椂錛岃褰曚笅鏈鍚庝竴涓闂殑鐘舵佸鹼紝鐒跺悗浠庤鍙栬鐘舵佸搴旂殑鎿嶄綔寮濮嬶紝灝卞儚鏍堟搷浣滅殑閫鏍堜竴鏍鳳紝涓嶅仠寰鍥炴悳錛岀洿鍒版壘鍒版悳绱㈣搗鐐逛負(fù)姝€傝褰曞ソ鏍堥鍑烘潵鐨勬搷浣滃鹼紝灝辨槸涓鏉¤礬寰勩?
 
 
 
 浠ュ墠鐪嬩簡鍒樻睗浣崇殑涔︿笂鐨凙*綆楁硶錛屼竴鐩翠笉鐭ラ亾鎬庝箞鍐欙紝鍙互鍙傝冧笅闈㈣繖涓ā鍨嬨?/font>
鍏充簬鍏暟鐮侀棶棰樺彲浠ユ湁寰堝縐嶅疄鐜幫紝榪欏彧鏄叾涓竴縐嶃?/font>
A*綆楁硶姹傚叓鏁扮爜闂{杞瑌
2008-05-08 09:18

錛?錛?鐢ˋ*綆楁硶錛?浼頒環(huán)鍑芥暟閫?#8220;Hamilton璺濈”姣旈夌敤“鍦ㄩ敊璇柟鍚勫唴鐨勬暟瀛楁暟鐩?#8221;寮哄緢澶氥?
錛?錛堿*綆楁硶鐨勫叧閿槸瑕佽兘澶熶嬌“鎵懼埌鑰楄垂鏈灝忕殑鑺傜偣”鍜?#8220;鍒ゆ柇鏄惁瀛愯妭鐐瑰凡緇忓瓨鍦?#8221;鐨勭畻娉曠殑鏁堢巼灝藉彲鑳介珮錛屼負(fù)姝わ紝緗戜笂涓嶅皯璧勬枡寤鴻閲囩敤Binary Heap鎴朒ash table絳夋暟鎹粨鏋勶紝鐒惰屽崟鐙嬌鐢ㄤ換浣曚竴縐嶆暟鎹粨鏋勶紝閮芥湁涓瀹氱殑緙洪櫡錛屽皢Heap鍜孒ash鑱斿悎璧鋒潵浣跨敤錛屽簲璇ュ彲浠ユ彁楂樹笉灝戞晥鐜囥傚叿浣撳涓嬶細(xì)
1銆傚緩涓寮燞ash琛紝瀛樻斁娌′竴涓妭鐐圭殑鍏蜂綋淇℃伅錛屽褰撳墠鐘舵併佺埗鑺傜偣鍦ㄨ〃涓殑浣嶇疆絳夈?
2銆俹pen琛ㄤ腑瀛樻斁鐫涓浜涜妭鐐癸紝榪欎簺鑺傜偣涓嶅悓浜嶩ash琛ㄤ腑鐨勮妭鐐癸紝鍙互灝嗗畠鐞嗚В涓烘槸Hash琛ㄤ腑鑺傜偣鐨勭儲寮曪紝瀹冨彧鍖呭惈鑺傜偣鐨勪及浠峰拰鑺傜偣鍦℉ash琛ㄤ腑鐨勪綅緗紝榪欎簺鑺傜偣鎸変及浠鋒帓鍒楁垚鍫嗭紙Heap錛夈?
3銆傛病蹇呰鍐嶅緩涓涓猚losed琛ㄣ?
榪欐牱錛岀▼搴忕殑嫻佺▼灝卞彲浠ュ啓鎴愶細(xì)
鍒濆鍖朒ash琛ㄥ拰open琛紱
灝嗘牴鑺傜偣鏀懼叆Hash琛ㄥ拰open琛紱
found = false;
while(open琛ㄤ笉絀? {
      浠巓pen琛ㄤ腑寰楀埌鑰楄垂鏈浣庣殑鑺傜偣鐨勭儲寮昪ur; // O(1)
      浠巓pen琛ㄤ腑鍒犻櫎鑰楄垂鏈浣庣殑鑺傜偣; // O(logN)
      for 姣忎釜cur鐨勫瓙鑺傜偣now do {
           if ( now 鏄洰鏍囪妭鐐?) {
                   鎵撳嵃杈撳嚭;
                   found = true;
                   緇撴潫鎼滅儲;
           }
           if( now 涓嶅湪Hashtable涓?) { // O(1)
                灝唍ow鎻掑叆Hashtable涓? // O(1)
                灝唍ow鐨勭儲寮曟斁鍏pen琛ㄤ腑; // O(logN)
           } else if( now姣擧ashtable涓殑鑺傜偣浼?) {
                if( 鍘熻妭鐐瑰湪open琛ㄤ腑 ) { // O(N)
                     鐢╪ow鏇夸唬鍘熸潵鑺傜偣; // O(1)
                     鍦╫pen涓璸ush_heap鏉ユ洿鏂皁pen琛ㄧ殑欏哄簭; // O(logN)
                 }
           }
       }
   }
   if( !found ) 杈撳嚭 "鏃犺В";
鍙互鐪嬪埌錛岃櫧鐒舵煡鎵緊pen琛ㄤ腑宸插瓨鍦ㄧ殑鑺傜偣浠嶇劧涓篛(N)錛?浣嗘槸褰搉ow宸插瓨鍦ㄦ椂錛宯ow姣攐pen琛ㄤ腑鑺傜偣浼樼殑姒傜巼鏄緢灝忕殑錛屼簨鍏堢敤O(1)鐨勬椂闂村垽鏂紝灝卞彲浠ラ伩鍏嶇敤O(N)鐨勬椂闂存潵鏌ユ壘錛屼粠鑰屾彁楂樹簡鏁堢巼錛堣繖寰堝儚鏄疌PU鐨凜ache鐨勫伐浣滃師鐞嗭級銆?
鍏蜂綋紼嬪簭濡備笅錛?/p>

#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <cassert>
using namespace std;
struct OpenNode{
int cost, point;
OpenNode(){}
OpenNode( int cost, int point ){
   this->cost = cost;
   this->point = point;
}
};
bool operator<( const OpenNode& a, const OpenNode& b ){
return a.cost > b.cost;
}
bool operator==(const OpenNode& a, int c){
return a.point == c;
}

struct HashNode{
char state[3][3];
int g, h, par, dir,x,y;
bool used;
HashNode(){
   used=false;
}
};

int dx[] = { -1,0,1,0 },
dy[] = { 0,1,0,-1 }; // u r d l

const int HASH_SIZE = 39999;
HashNode List[HASH_SIZE];
int factorial[] = {1,1,2,6,24,120,720,5040,40320};
/*int hash( char state[3][3] ){
int ret = 0;
char *p, *q;
for(p=&state[0][0];p<=&state[2][2];p++){
int cnt = 0;
for(q=&state[0][0]; q<p; q++) if( *q<*p ) cnt++;
ret += factorial[&state[2][2]-p]*(*p-cnt);
}
return ret;
}*/
bool eq( char a[3][3], char b[3][3] ){
for(int i=0;i<3;i++)
   for(int j=0;j<3;j++) if( a[i][j]!=b[i][j] ) return false;
   return true;
}
int hash( char state[3][3] ){
char* p = &state[0][0];
int ret = p[0] * 7 + p[1] * 17 + p[2] * 47 + p[3] * 117 + p[4] * 217 + p[5]
   * 977 + p[6] * 1299 + p[7] * 5971 + p[8] * 7779;
ret %= HASH_SIZE;
while( List[ret].used && !eq(List[ret].state , state) )
   ret= (ret+1) % HASH_SIZE;
return ret;
}
int h( char state[3][3] ){
int ret = 0;
for(int x=0;x<3;x++)
   for(int y=0;y<3;y++) if( state[x][y]!=0 )
    ret += abs((state[x][y]-1)/3-x) +abs((state[x][y]-1)%3-y);
   return ret;
}
void output( int i ){
string res;
while(List[i].dir>=0){
   res+= List[i].dir==0?'u':List[i].dir==1?'r':List[i].dir==2?'d':'l';
   i = List[i].par;
}
reverse( res.begin(), res.end() );
cout<<res<<endl;
}
bool solvable( char state[3][3] ){
int t = 0;
for(char* i=&state[0][0];i<&state[2][2];i++)
    for(char* j=i+1;j<=&state[2][2];j++)
      if(*i!=0 && *j!=0 && *i>*j) t++;
if(t%2) return false;
return true;
}
vector<OpenNode> open;
int main(){
string init;
getline( cin, init );
HashNode now;
int cnt=0;
for(int i=0;i<init.size();i++) {
   if(init[i] == 'x') {
    now.state[cnt/3][cnt%3] = 0;
    now.x = cnt /3;
    now.y = cnt %3;
    cnt++;
   } else if(init[i]!=' ') {
    now.state[cnt/3][cnt%3] = init[i] - '0';
    cnt++;
   }
}
if( !solvable(now.state) ) {
    cout<<"unsolvable"<<endl;
    return 0;
}
now.g = 0;
now.h = h(now.state);
now.par = -1;
now.dir = -1;
now.used = true;
int i = hash(now.state);
List[i] = now;
open.push_back(OpenNode(now.g+now.h,i));
while(!open.empty()){
   int cur = open.front().point;
   pop_heap( open.begin(), open.end() );
   open.erase( open.end()-1 );
   for(int i=0;i<4;i++){
    now = List[cur];
    int x = now.x+dx[i];
    int y = now.y+dy[i];
    if(x<0||x>2||y<0||y>2) continue;
    swap( now.state[x][y], now.state[now.x][now.y] );
    now.x = x;
    now.y = y;
    now.h = h( now.state );
    now.g++;
    now.par = cur;
    now.dir = i;
   
    int hashcode = hash( now.state );
    if( now.h == 0 ){
     List[hashcode] = now;
     output( hashcode );
     return 0;
    } else if( !List[hashcode].used ){
     List[hashcode] = now;
     open.push_back( OpenNode(now.h+now.g,hashcode) );
     push_heap( open.begin(), open.end() );
    } else if( List[hashcode].g+List[hashcode].h > now.g+now.h ){
     List[hashcode] = now;
     vector<OpenNode>::iterator it = find( open.begin(), open.end(), hashcode );
     if(it==open.end()) continue;
     push_heap( open.begin(), it+1 );
    }
   }
}
cout<<"unsolvable"<<endl;
return 0;
}



]]>
精品永久久福利一区二区| 狠狠88综合久久久久综合网| 伊人久久大香线蕉综合5g| 伊人色综合久久天天人手人婷 | 伊人久久大香线蕉亚洲五月天| 看久久久久久a级毛片| 婷婷久久综合九色综合98| 久久久亚洲裙底偷窥综合| 成人国内精品久久久久影院VR| 中文无码久久精品| 国产99久久久国产精免费| 久久精品卫校国产小美女| 久久九九久精品国产免费直播| 久久精品国产亚洲AV无码娇色| 亚洲另类欧美综合久久图片区| 午夜久久久久久禁播电影| 香蕉久久夜色精品国产2020| 日本精品久久久中文字幕 | 久久99热这里只有精品国产| 亚洲精品乱码久久久久久久久久久久 | 国产农村妇女毛片精品久久| 男女久久久国产一区二区三区| 色99久久久久高潮综合影院| 国产三级久久久精品麻豆三级| 久久久久免费精品国产| 亚洲国产精品成人久久蜜臀 | 国产成年无码久久久久毛片| 久久91精品久久91综合| 99久久精品国产毛片| 久久一区二区三区99| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 综合久久国产九一剧情麻豆| 亚洲国产精品成人AV无码久久综合影院| 国产精品女同久久久久电影院| 久久天天躁夜夜躁狠狠| 久久婷婷人人澡人人爽人人爱| 久久夜色精品国产亚洲| 无码人妻久久久一区二区三区| 奇米综合四色77777久久| 久久精品人人槡人妻人人玩AV | 久久99精品久久只有精品|