time limit: 10 sec memory limit: 162 mb
submit: 2741 solved: 1537
[submit][status][discuss]
在乙個4*4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動
時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移
動到某人心中的目標狀態。
前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒有放置玩具。接著是乙個空
行。接下來4行表示玩具的目標狀態,每行4個數字1或0,意義同上。
乙個整數,所需要的最少移動次數。
1111
0000
1110
0010
1010
0101
1010
0101
4提交位址: bzoj1054
題解 :
調了很久, 我還是太菜了;
就是廣搜,沒什麼難度;
乙個陣列寫錯了調了半天qaq;
code:
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;67
int dx=, dy=;
8bool a[5][5], b[5][5];9
10 inline int hash(bool t[5][5
])1119}
20return
s;21}22
23bool vis[100010
];24
25struct
date
26q[100010
];30
31int
main()
3242 vis[beg] = 1
;
43int l = 0, r = 1;44
while (l 4561 vis[h] = 1
;62 memcpy(q[r].o, q[l].o, sizeof
q[r].o);
63 q[r].stp = q[l].stp + 1
;64 r++;65}
66swap(q[l].o[i][j], q[l].o[x][y]);67}
68}69}
70 l++;71}
72return0;
73 }
bzoj 1054 移動玩具
題解 瞎基本搜是沒有希望的,還是正常的bfs比較靠譜 看出4 4的格仔每行串在一起即是乙個01串,可以用類似於狀態壓縮的思想解決,將其轉化為十進位制數,主要為了判斷是否已經到了理想的狀態 佇列中儲存狀態,在bfs的時候取出隊首,針對每乙個棋子的四種移動產生新的狀態,再入隊處理即可 有點搞不懂當時為什...
Bzoj 1054 HAOI2008 移動玩具
在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒...
bzoj1054 HAOI2008 移動玩具
無聊時想練一下構圖又懶得打廣搜 發現狀態只有2 16種 於是根據相鄰狀態連邊 最多只有2 22條邊 極有可能不到 然後直接跑最短路即可 如下 include using namespace std define n 100005 define m 4200000 define inf 1000000...