洛谷 P2730 魔板

2022-07-30 05:33:19 字數 1372 閱讀 8985

在成功地發明了魔方之後,魯比克先生發明了它的二維版本,稱作魔板。這是一張有8個大小相同的格仔的魔板:

1 2 3 4

8 7 6 5

我們知道魔板的每乙個方格都有一種顏色。這8種顏色用前8個正整數來表示。可以用顏色的序列來表示一種魔板狀態,規定從魔板的左上角開始,沿順時針方向依次取出整數,構成乙個顏色序列。對於上圖的魔板狀態,我們用序列(1,2,3,4,5,6,7,8)來表示。這是基本狀態。

這裡提供三種基本操作,分別用大寫字母「a」,「b」,「c」來表示(可以通過這些操作改變魔板的狀態):

「a」:交換上下兩行;

「b」:將最右邊的一列插入最左邊;

「c」:魔板**四格作順時針旋轉。

下面是對基本狀態進行操作的示範:

a: 8 7 6 5

1 2 3 4

b: 4 1 2 3

5 8 7 6

c: 1 7 2 4

8 6 3 5

對於每種可能的狀態,這三種基本操作都可以使用。

你要程式設計計算用最少的基本操作完成基本狀態到目標狀態的轉換,輸出基本操作序列。

只有一行,包括8個整數,用空格分開(這些整數在範圍 1——8 之間)不換行,表示目標狀態。

line 1: 包括乙個整數,表示最短操作序列的長度。

line 2: 在字典序中最早出現的操作序列,用字串表示,除最後一行外,每行輸出60個字元。

2 6 8 4 5 7 3 1

7 

bcabccb

列舉三種方式,用mp判重,最後輸出即可;

1 #include2

using

namespace

std;

3string

y;4 queueq;

5 mapmp;

6void a_(string x)//

a操作 715

if(mp.count(x)==0)//

如果沒被找過,就紀錄它 ,並且進佇列

1620

return;21

} 22

void b_(string x)//

b操作

2338

return;39

} 40

void c_(string x)//

c操作

4152

return;53

} 54

void

bfs()

5569 q.pop();//

彈出 70}71

} 72

intmain()

7380

bfs();

81return0;

82}83

洛谷P2730 魔板 Magic Squares

輸入格式 輸出格式輸入樣例 1 輸出樣例 1 include include using namespace std const int n 5e4 5,m 165e5 const int g 3 9 操作a 交換上下兩行 操作b 將最右邊的一列插入最左邊 操作c 魔板 四格作順時針旋轉 我們可以用...

洛谷 P2730 魔板 Magic Squares

一塊初始的2 4的模板,有三種變動方式,給定目標狀態,求出最少要多少步變成目標狀態,並輸出變動方式。第一眼看這題的時候,心裡就想 這不就是bfs嗎,居然有提高 的水準 最多普及 但這個記憶體是真心噁心,如果開八維存下每種數量的話肯定mle,所以我們可以用乙個24位的二進位制存下一種方案,再加上bfs...

洛谷 P1275 魔板

有這樣一種魔板 它是乙個長方形的面板,被劃分成n行m列的n m個方格。每個方格內有乙個小燈泡,燈泡的狀態有兩種 亮或暗 我們可以通過若干操作使魔板從乙個狀態改變為另乙個狀態。操作的方式有兩種 1 任選一行,改變該行中所有燈泡的狀態,即亮的變暗 暗的變亮 2 任選兩列,交換其位置。當然並不是任意的兩種...