簡單魔板 Special judge

2021-07-04 22:38:20 字數 1536 閱讀 9637

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操作(中間四小塊順時針轉一格):

1 7 2 4

8 6 3 5

用上述三種基本操作,可將任一種狀態裝換成另一種狀態。

input

輸入包括多個要求解的魔板,每個魔板用三行描述。

第一行步數n(不超過10的整數),表示最多容許的步數。 第

二、第三行表示目標狀態,按照魔板的形狀,顏色用1到8的表示。

當n等於-1的時候,表示輸入結束。

output

對於每乙個要求解的魔板,輸出一行。

首先是乙個整數m,表示你找到解答所需要的步數。接著若干個空格之後,從第一步開始按順序給出m步操作(每一步是a、b或c),相鄰兩個操作之間沒有任何空格。

注意:如果不能達到,則m輸出-1即可。

// problem#: 1150

// submission#: 3823447

// the source code is licensed under creative commons attribution-noncommercial-sharealike 3.0 unported license

// uri:

// easy_moban.cpp

#include "iostream"

#include "string.h"

using namespace std ;

class moban

moban (int x1 , int x2 , int x3 , int x4 , int y1 , int y2 , int y3 , int y4)

bool operator==(moban &m2)

}return true ;

}bool operator!=(moban &m2)

};moban stan_moban = moban( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;

int stan_dep = 0 , flag = 0 ;

void dfs(moban m , int dep , string now )

else if ( (dep == stan_dep) && (m != stan_moban) )

if( m == stan_moban )

if(flag == 0)

if(flag == 0 )

if(flag == 0 )

if(flag == 0 && dep == 0 )

return ;

}int main ()

return 0 ;

}

sicily 簡單魔板2

sicily上面的三道 簡單魔板 的變形,開始以為資料變大了第一道題的解法行不通了,其實不然。網上看到用康托展開來進行儲存狀態的,發現其實對於這道題沒能發揮康托展開的強大威力。下面是找到別人的 自己加了一些注釋 嗚嗚,我不想剽竊的。只是 不了。原文出處 其實這道題沒必要使用康托編碼,這裡沒發揮它的強...

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...

字尾陣列 魔板

為什麼一開始要再字串末尾多算個0呢 因為當開始分關鍵字比較的時候 最後要組成兩個 字元所以要多個0 什麼你有問我為什麼填0 因為0小啊 先處理唄 雖然 sa是根據每個字元確定的大小 也就是排布的每個字元的排名 但是在初次求第二關鍵字排序的時候 可以使用sa的結論 首先吧sa後面的0排到最前面 那麼0...