【題目描述】
阿蘭是某機密部門的打字員,她現在接到乙個任務:需要在一天之內輸入幾百個長度固定為6的密碼。當然,她希望輸入的過程中敲擊鍵盤的總次數越少越好。
不幸的是,出於保密的需要,該部門用於輸入密碼的鍵盤是特殊設計的,鍵盤上沒有數字鍵,而只有以下六個鍵:swap0, swap1, up, down, left, right,為了說明這6個鍵的作用,我們先定義錄入區的6個位置的編號,從左至右依次為1,2,3,4,5,6。下面列出每個鍵的作用:
swap0:按swap0,游標位置不變,將游標所在位置的數字與錄入區的1號位置的數字(左起第乙個數字)交換。如果游標已經處在錄入區的1號位置,則按swap0鍵之後,錄入區的數字不變;
swap1:按swap1,游標位置不變,將游標所在位置的數字與錄入區的6號位置的數字(左起第六個數字)交換。如果游標已經處在錄入區的6號位置,則按swap1鍵之後,錄入區的數字不變;
up:按up,游標位置不變,將游標所在位置的數字加1(除非該數字是9)。例如,如果游標所在位置的數字為2,按up之後,該處的數字變為3;如果該處數字為9,則按up之後,數字不變,游標位置也不變;
down:按down,游標位置不變,將游標所在位置的數字減1(除非該數字是0),如果該處數字為0,則按down之後,數字不變,游標位置也不變;
left:按left,游標左移乙個位置,如果游標已經在錄入區的1號位置(左起第乙個位置)上,則游標不動;
right:按right,游標右移乙個位置,如果游標已經在錄入區的6號位置(左起第六個位置)上,則游標不動。
當然,為了使這樣的鍵盤發揮作用,每次錄入密碼之前,錄入區總會隨機出現乙個長度為6的初始密碼,而且游標固定出現在1號位置上。當巧妙地使用上述六個特殊鍵之後,可以得到目標密碼,這時游標允許停在任何乙個位置。
現在,阿蘭需要你的幫助,編寫乙個程式,求出錄入乙個密碼需要的最少的擊鍵次數。
【輸入描述】
檔案僅一行,含有兩個長度為6的數,前者為初始密碼,後者為目標密碼,兩個密碼之間用乙個空格隔開。
【輸出描述】
檔案僅一行,含有乙個正整數,為最少需要的擊鍵次數。
【樣例輸入】
123456
654321
【樣例輸出】
11【資料範圍及提示】
時間限制應該是8s。
初始密碼是123456,游標停在數字1上。對應上述最少擊鍵次數的擊鍵序列為:
擊鍵序列:
擊鍵後的錄入區
(下劃線表示游標所在位置)
123456
swap1
623451
right
623451
swap0
263451
down
253451
right
253451
up254451
right
254451
down
254351
right
254351
up254361
swap0
654321
最少的擊鍵次數為11。
聰明的打字員
題目描述 阿蘭是某機密部門的打字員,她現在接到乙個任務 需要在一天之內輸入幾百個長度固定為6的密碼。當然,她希望輸入的過程中敲擊鍵盤的總次數越少越好。不幸的是,出於保密的需要,該部門用於輸入密碼的鍵盤是特殊設計的,鍵盤上沒有數字鍵,而只有以下六個鍵 swap0,swap1,up,down,left,...
聰明的打字員
正解太妙了 將6 66位上的數字壓縮成乙個int intin t,然後雙向 bfs bfsbf s 爆搜即可,卡卡常數勉強過去 由於 十分簡單,所以就不 想 打注釋了 include include include include include include using namespace st...
POJ 1184 聰明的打字員
簡直難到沒朋友。雙向bfs 剪枝。剪枝策略 對於2 5位置上的數,僅僅有當游標在相應位置時通過swap up。down來改變。那麼當當前位置沒有達到目標狀態時,left和right無意義。好了。僅僅剪掉這裡就過掉了。還有比較炫酷的方法實現列舉720種排列。然後狀壓什麼的。功力不夠全然看不懂。incl...