sicily 簡單魔板2

2022-10-10 23:24:16 字數 1333 閱讀 9728

sicily上面的三道「簡單魔板」的變形,開始以為資料變大了第一道題的解法行不通了,其實不然。網上看到用康托展開來進行儲存狀態的,發現其實對於這道題沒能發揮康托展開的強大威力。

下面是找到別人的**,自己加了一些注釋(嗚嗚,我不想剽竊的。。。只是**不了。。)

原文出處

其實這道題沒必要使用康托編碼,這裡沒發揮它的強大作用。因為從開始狀態往下一層一層的搜不會出現太多的狀態(試了下1000000步

也只是一萬多種狀態而已,所以康托編碼沒太多作用對於這道題)

1 #include2 #include

3 #include4 #include5

using

namespace

std;

6struct

board724

};25

intn;

26int x[4],y[4

];27

board q;

28bool isvisit[50000];//

用於搜尋某狀態是否曾經出現過

29int fact=;//

8的階乘表

30//

康托展開

31int

encode(board p)

3241

for(int i=0;i<7;i++) //

真正的康托展開在這裡開始

4248

return

sum;49}

50//a51

void

a(board p)

5263//b

64void

b(board p)

6576//c

77void

c(board p)

7889

bool

equal(board p)

9098

return

true;99

}100

void

bfs()

101125

if(equal(p))

126130

a(p);

131if(!isvisit[encode(q)])

132136

137b(p);

138if(!isvisit[encode(q)])

139143

144c(p);

145if(!isvisit[encode(q)])

146150

}151

}152

153int

main()

154162

return0;

163 }

Sicily 1150 簡單魔板(BFS)

此題可以使用bfs進行解答,使用8位的十進位制數來儲存魔板的狀態,用bfs進行搜尋即可 1 include 2 using namespace std 34 int op a int n 910 int op b int n 1920 int op c int n 26int ans a 0 100...

簡單魔板 Special judge

description 魔板由8個大小相同方塊組成,分別用塗上不同顏色,用1到8的數字表示。其初始狀態是 1 2 3 4 8 7 6 5 對魔板可進行三種基本操作 a操作 上下行互換 8 7 6 5 1 2 3 4 b操作 每次以行迴圈右移乙個 4 1 2 3 5 8 7 6 c操作 中間四小塊順時...

1449 例題2 魔板

題解這道題是一道非常典型的bfs題目,bfs所面臨的最大問題是判斷重複。顯然,如果每次判 斷重複都掃瞄一次佇列,搜尋的效率將非常低,會提高乙個指數級,所以一般寬度搜尋的判斷重複 都是運用陣列來實現的,那麼陣列下標就需要用乙個hash函式來計算出來。本題hash函式的設計 我們很容易想到將8個數字按順...