P4289 HAOI2008 移動玩具

2022-10-07 20:21:08 字數 1245 閱讀 2950

在乙個 \(4 \times 4\) 的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。

標籤是hash,可是我不會。我們看,棋盤大小就 \(4 \times 4\),固定的,想狀壓可行。那麼難點就在於二維陣列與二進位制的轉換。

對於這個矩形:\(1001\ 1011\ 0100\ 0100\),我們把它一行一行列出來,依次表示二進位制的第 \(i\) 位,就上面這個矩形,二進位制就是 0010001011011001。我們觀察一下規律:

\(1 \ 1 \to 2^0,1 \ 2 \to 2^1,1 \ 3 \to 2^2,1 \ 4 \to 2^3,2 \ 1 \to 2^4,2 \ 2 \to 2^5\)

這能看出甚麼?好像能推出兩條柿子,任選乙個嘍。

\(k =(i-1) \times 4+(j-1) \ \text\ k=(4 \times i)-(4-j+1)\)

那麼這題就做完了,廣搜一下就好了。

/*

knowledge : rubbish algorithm

work by : dreamcatcher

time : o(ac)

*/#include#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int mod=1e9+7;

const int n=1e6+6;

int read()

void print(int x)

int dx= ;

int dy= ;

int a[5][5],b[5][5],st,to,f[5][5];

int reverse_one(int m[5][5])

void reverse_two(int k)

int dis[n],vis[n];

void bfs()}}

}}

return;

}signed main()

}for(int i=1;i<=4;i++)

}st=reverse_one(a);

to=reverse_one(b);

return bfs(),0;

}

P4289 HAOI2008 移動玩具

在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移動到某人心中的目標狀態。輸入格式 前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具...

移動玩具 HAOI2008

在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動時只能將玩具向上下左右四個方向移動,並且移動的位置不能有玩具,請你用最少的移動次數將初始的玩具狀態移 動到某人心中的目標狀態。前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示...

HAOI2008 移動玩具

非常抱歉,菜雞風潯凌又來水藍題了qwq 看到題解上寫雙向搜尋?什麼鬼.看到資料範圍特別小,直接劃分二分圖,兩個點之間連線容量為1,費用為曼哈頓距離的邊,跑費用流即可。什麼?你問我那個不能移動到有玩具的格仔的限制?不用管了啦,因為費用流會給你跑費用最小的,也就是每個點都會找到最近的那個點,不會有其他點...