NOIP模擬 箱子

2022-05-12 05:29:11 字數 2049 閱讀 9644

【問題描述】 有個桌子長 r 寬 c,被分為 r*c 個小方格。其中,一些方格上有箱子,一些方格上有 按 鈕,一些方格上有障礙物,一些方格上是空地。現在有個任務,需要把所有箱子推到這 些按 鈕上面。箱子有個特徵,只能推不能搬不能拉。現在需要用最少的步數把所有箱子推 到按鈕 上。 當然,箱子和人都只能以格仔為單位移動,不存在一部分在格內一部分在格外 的情況; 只能向四個方向推,箱子和推箱子的隊員都不能穿越障礙物。推動的定義是,人 的前進方向 被箱子擋住,且箱子在順著前進方向的下一格不是箱子或者障礙物,那麼就可 以推著箱子和 箱子一起前進一步。

【輸入檔案】 輸入第一行有兩個整數 r,c(4<=r,c<=7),代表桌子的長和寬,接下來一共有 r 行, 每行有 c 個字元。 字元的含義: 0:代表空地 1:代表障礙物 2:代表箱子 3:代表按鈕 4:人所在的初始地方 輸入資料保證障礙物環繞整個地圖,箱子數目跟按鈕數目相同,箱子最少有乙個,不 會 超過 3 個,隊員肯定只有乙個。不用考慮箱子初始就按著按鈕的情況。保證有解

【輸出檔案】 輸出只有一行,為解決機關的最小步數。

【輸入樣例】 4 5 11111 14231 10231 11111

【輸出樣例】 4

【樣例說明】 在樣例中,最快的方法之一是先向東把第乙個箱子推到按鈕上,然後向西走 回原處,之 後向南一步,再向東推第二個箱子到按鈕上。至此任務完成,共使用了 4 步。 【資料範圍】 對 30%的輸入資料 :箱子只有乙個。 對 100%的輸入資料 :4<=r,c<=7。

分析:測試t2,心態不好,沒敢調

bfs+儲存狀態

首先我們將每個位置重新編號

用f[person][box1][box2][box3]來儲存現在的狀態,即人在person處,三個箱子分別在box1,box2,box3處的狀態移動的最小步數。

先擴充套件人的移動(人不碰到箱子時),再擴充套件人與箱子一起的移動

#includeusing

namespace

std;

#define n 51

intn,m,cnt,t1,t2,sx,sy;

inte[n][n],pos[n][n];

intf[n][n][n][n];

int dx[5]=;

int dy[5]=;

intbox[n],button[n],cx[n],cy[n],ope[n];

bool

vis[n][n];

char

c[n];

struct

email

st;email makepair(

int x,int y,int w,int

z)queue

que;

intmain()

if(e[i][j]==2)box[++t1]=pos[i][j];

if(e[i][j]==3)button[++t2]=pos[i][j];

if(e[i][j]==1)vis[i][j]=false

; }}

f[pos[sx][sy]][box[

1]][box[2]][box[3]]=0

; st.person=pos[sx][sy];st.box1=box[1];st.box2=box[2];st.box3=box[3

]; que.push(st);

while(!que.empty())

int num=f[ps][b1][b2][b3];

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

ope[

1]=b1,ope[2]=b2,ope[3]=b3;

if(pos[p][q]==ope[2])swap(ope[1],ope[2

]);

if(pos[p][q]==ope[3])swap(ope[3],ope[1

]);

if(pos[p][q]==ope[1

]) }}

vis[x1][y1]=true;vis[x2][y2]=1;vis[x3][y3]=1

; }

return0;

}

NOIP模擬 修路

這題第一眼看上去有些懵逼,還以為是dp。第二眼,哦,這麼裸的最小生成樹,2分鐘打完,拍都沒對,自信100分。最終100分。每條邊的權值減去連個節點的權值,所有的邊做一次最小生成樹就好了。include include include include include define fo i,a,b f...

NOIP模擬 項鍊

經過一番周折,bob找到了alice,為了安慰alice驚魂未定的心,bob決定給alice買一條手鍊,這條手鍊由m個珍珠組成,每個珍珠上刻著不同的小寫字母。當alice看到一些字母按照一定的順序排列成的字串時,就會產生一定的愉悅值。bob現在可以在這m個珍珠上刻上字母,現在他想知道,如何刻字母可以...

NOIP模擬 幻象

phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生 空格 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。等我比賽完之後,我們才知道 空格 是x2 所以比...