HDU 6171 Admiral(搜尋 剪枝)

2021-09-08 13:28:32 字數 711 閱讀 8112

多校10 1001 hdu 6171 admiral

設計乙個估價函式來剪枝,每個數最少需要|a[i][j]-i|步回到自己的位置。當所有數回到自己位置,0自然也回到自己位置。所以估價函式不計算0。

然後21個位置,每個位置數字是0~5,用三位2進製表示。總共63位2進製。long long可以記錄狀態。然後就是搜尋了。

#include #include #include #include using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))

#define rep(i,l,r) for (int i=l;ivis;

struct sta

};int gujia(sta s)

ull haxi(sta s)

return ans;

}int bfs(sta s)

swap(now.a[x][y],now.a[nx][ny]);

now.x-=dx[i],now.y-=dy[i],--now.step;}}

}return -1;

}int main()

int ans=bfs(s);

if(ans==-1)puts("too difficult");else printf("%d\n",ans);

}return 0;

}

hdu 1254 推箱子 廣搜 深搜

注意以下幾點 1.箱子是否可走 2.人是否可達箱子後面 3.箱子的每個方向只走一次,而不是每個位置 廣搜箱子路徑,深搜人可否達箱子後面,記錄方向用visb 10 10 4 來記錄 include include include include include includeusing namespa...

hdu 1010 深搜 回溯

也不想解釋了,只是做來找回做題的感覺。遲d出個這方面的小總結,越來越發現對所學知識作總結的重要性了 1010tempter of the bone include includeint n,m,time int xs,ys,xd,yd int direc 4 2 char str 11 11 boo...

HDU 1401 Solitaire (雙向廣搜)

題意 在二維8 8的方格,給定4個初始點和4個最終點,問在8步內是否能從初始點走到最終點,雙向廣搜 同時對初始點和最終點廣搜4步,對每一步記錄狀態,初始點為 1 最終點為 2 若在限定時間內初始點的狀態能到達 2 或最終點的狀態能到達 1 則為yes!要記得排序。include include in...