移動玩具 HAOI2008

2022-02-03 11:43:49 字數 2354 閱讀 4345

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

動到某人心中的目標狀態。

前4行表示玩具的初始狀態,每行4個數字1或0,1表示方格中放置了玩具,0表示沒有放置玩具。接著是乙個空行。接下來4行表示玩具的目標狀態,每行4個數字1或0,意義同上。

乙個整數,所需要的最少移動次數。

1111

0000

1110

0010

1010

0101

1010

0101

4

題解

今天的排名是幾天以來最高的,出分之前卻十分難過。只打了一道半題,剩下兩道敲不出正解打不出暴力,不出所料地兩題爆零,意料之外地把我最好預估可能拿到的分數全部拿到了。調第一題的bfs良久,剛開始因為某些亂七八糟的錯誤一直執行錯誤,後來持續時間超限,意識到用我的想法不應該dfs後改成bfs又一直輸出0,心力交瘁一直到十點左右調出樣例內心感慨萬分。期間多次想扔掉這題去打一打別的題,可是其他題實在不知道應該怎麼做,索性一直調下去。之後第三題撿起我打了一半的暴力,優化了一下一開始超時的spfa,只求過掉前5個點。最高估分是150,最低就不好說了,比起昨天80-150的估分心理虛了不少,中午睡覺一直輾轉反側醒了好幾次。但最後得了150,只能說我那三個小時沒有白調,但是這樣的事絕不會在正規考試中發生。毫無思路的第二題和第三題也告訴我基礎實在還很不行,要學的、要複習的都很多,時間寶貴啊。

一看只有4*4的01矩陣,就覺得這題天生適合搜尋,而且很可能搜出正解。二進位制處理一下,開開心心開始dfs。剛開始二進位制各種錯亂,各種核實各種優化卻發現這種搜尋根本停不下來。忽然意識到dfs會把一種情況搜到底,可是它可能根本不是在往正確的方向走,想起最優解應該用bfs,又開始改成bfs。平常幾乎不怎麼用bfs,在取出佇列中元素的時候又把while寫成了if,導致結果一直是0滿頭霧水。終於改過了這一堆錯,兩個半個小時已經過去了,後面三道題一分沒得,看見那個樣例輸出真是如釋重負。這次考試一方面是因為後面的題不會做,另一方面是因為調這道題時間太長,雖然a掉了但還是非常虛。考試是過程也是經驗,考試是一種有趣的經歷,不管得到的是快樂還是苦惱。

#include#include

#include

#include

using

namespace

std;

int lx[5],xs[5],temp,dd[18][18][18][18

];char a1[5

];void

init()

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

}}int

jg,tp;

void bj(int &x,int

y)struct

ztzt;

queue

q;bool cj=0

;void ss(int x1,int x2,int x3,int x4,int

bz)

if(cj) return

;

if(dd[x1][x2][x3][x4]<=bz) return

; dd[x1][x2][x3][x4]=bz;

intcl;

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

for(int j=1;j<=4;j++)

if(j!=4&&!(x1&(1

<<(cl-1

))))

if(!(x2&(1

<}

if(i==2

)

if(x2&(1

<<(cl-1

))))

if(!(x3&(1

<}

if(i==3

)

if(x3&(1

<<(cl-1

))))

if(!(x4&(1

<}

if(i==4

)

if(x4&(1

<<(cl-1

))))

if(!(x3&(1

<}

}while(!q.empty())

}int

main()

這**有毒= =7k呀水題

HAOI2008 移動玩具

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

HAOI2008 移動玩具

time limit 10 sec memory limit 162 mb submit 2561 solved 1430 submit status discuss 在乙個4 4的方框內擺放了若干個相同的玩具,某人想將這些玩具重新擺放成為他心中理想的狀態,規定移動 時只能將玩具向上下左右四個方向移...

HAOI2008 移動玩具

這是一道搜尋題,我採用雙向廣搜 狀壓解決,對每乙個狀態列舉可以移動的位置,將狀態擴充套件,然後通過對陣列狀壓的方法進行記錄結果。另外,注意對答案為0的特判,因為起始狀態與目標狀態相同時無法搜出結果。1 include 2 include 3 include 4 include 5 include 6...