HDU 1430 魔板 搜尋

2021-08-27 02:20:37 字數 1020 閱讀 9653

by---cxlove

起始狀態和目標狀態都已確定,而且狀態比較多,可以雙向bfs搞定,不過需要記錄路徑,**不好寫,而且需要時間多。

從amb的博文裡學到了預處理,由於是8種顏色,而且可以確定,就可以通過置換,把起始狀態轉換成12345678,目標狀態同時也置換。

對於起點12345678,進行bfs,到所有狀態的路徑。對於每一種詢問直接查詢即可。

hash用的是康托展開

dbl,orz

#include#include#include#include#include#include#include#include#include#include#define inf 1<<30

#define ll long long

#define maxn 1<<24

using namespace std;

struct nodes,u,v;

int fac[8]=;

int pre[40321];

char ope[40321];

int get_hash(int *tmp)

return ret;

}void change_a(int *tmp)

void change_b(int *tmp)

void change_c(int *tmp)

void bfs()

}else if(i==1)

}else

}} }

}int main();

memcpy(s.a,t,8*sizeof(int));

s.val=get_hash(s.a);

bfs();

char s1[10],s2[10];

while(scanf("%s%s",s1,s2)!=eof)

for(int i=cnt-1;i>=0;i--)

putchar(ans[i]);

putchar('\n');

} return 0;

}

HDU1430 魔板 康托展開

problem description 在魔方風靡全球之後不久,rubik先生發明了它的簡化版 魔板。魔板由8個同樣大小的方塊組成,每個方塊顏色均不相同,可用數字1 8分別表示。任一時刻魔板的狀態可用方塊的顏色序列表示 從魔板的左上角開始,按順時針方向依次寫下各方塊的顏色代號,所得到的數字序列即可表...

hdu 1430 魔板 康拓展開 對映優化

給定三種操作,將排列a轉化為排列b,求最少步驟。這種題目可以只跑一次bfs,比如只跑 12345678 那麼如果遇到 23456781 某個字串呢?因為每乙個數字都是等價的,我們可以把2對映為1,3對映成2,以此類推。這樣就可以用 12345678 跑出來的操作序列了。include include...

HDU 1430(康拓展開hash)

在魔方風靡全球之後不久,rubik先生發明了它的簡化版 魔板。魔板由8個同樣大小的方塊組成,每個方塊顏色均不相同,可用數字1 8分別表示。任一時刻魔板的狀態可用方塊的顏色序列表示 從魔板的左上角開始,按順時針方向依次寫下各方塊的顏色代號,所得到的數字序列即可表示此時魔板的狀態。例如,序列 1,2,3...