在乙個4*4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。
輸入格式:
前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒有放置玩具。接著是乙個空行。接下來4行表示玩具的目標狀態,每行4個數字1或0,意義同上。
輸出格式:
乙個整數,所需要的最少移動次數。
輸入樣例#1:
11110000
1110
0010
1010
0101
1010
0101
輸出樣例#1:
4
solution:
本題比較水,但是我調得快心態炸裂了。(因為變數名的問題,弄錯了好幾個變數,搞得一直以為手打佇列有錯,唉~太菜了~!)
從某一狀態轉移到另一狀態,且給定了轉移方法,那麼不難想到,一般直接廣搜就$ok$了。
關鍵如何判重和記錄狀態,此時由於每個狀態是乙個$16$位$0/1$字串,很自然想到了狀態壓縮:用$1$到$2^=65536$來記錄每個狀態,爆搜就$ac$了。至於如何轉移就直接模擬好了!(本人較蠢,方法比較繁瑣,話說手推了一波轉移過程,~滑稽~)
**:
#include#define for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)using
namespace
std;
const
int n=65560
;int st,ed,op[20
],opt,mp[n],ans;
int dx[17][4]=;
queue
q;char
s;bool
vis[n];
intmain()
for(i,
1,16) for(j,0,3
)
if(dx[i][j]!=0
) swap(op[i+dx[i][j]],op[i]);}}
}cout
}
P4289 HAOI2008 移動玩具
在乙個 4 times 4 的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。標籤是hash,可是我不會。我們看,棋盤大小就 4 times...
移動玩具 HAOI2008
在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移 動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示...
HAOI2008 移動玩具
非常抱歉,菜雞風潯凌又來水藍題了qwq 看到題解上寫雙向搜尋?什麼鬼.看到資料範圍特別小,直接劃分二分圖,兩個點之間連線容量為1,費用為曼哈頓距離的邊,跑費用流即可。什麼?你問我那個不能移動到有玩具的格仔的限制?不用管了啦,因為費用流會給你跑費用最小的,也就是每個點都會找到最近的那個點,不會有其他點...