NOJ 1325 特殊的二階魔方

2021-09-28 11:21:33 字數 3066 閱讀 4955

時限:1000ms 記憶體限制:10000k 總時限:3000ms

魔方大家應該都玩過。現在有乙個特殊的二階魔方,它只有一面是白色,其餘五個面全是黑色。玩這個魔方當然也有特殊的規則,玩家只能通過六種方式去改變它,底層向左轉一格(稱為dl),底層向右轉一格(稱為dr),右側向上轉一格(稱為ru),右側向下轉一格(稱為rd),內側順時針轉一格(稱為c),內側逆時針轉一格(稱為cc)。現給一魔方的狀態,請在最少的步驟內把魔方還原

按照上下左右前後的順序給出各面的具體情況,0表示白色,1表示黑色。上下、左右、前後分別是以俯檢視、左檢視、正檢視看到的

輸出令一面全為白色的最小步數。

00

0011

1111

1111

1111

1111

11

#include

#include

#include

#include

#include

using

namespace std;

int rfs[2]

[24]=

,};//ru,rd操作對應的對映

int cfs[2]

[24]=

,};bool cfg[24]

=;int tmp[4]

;struct node

node dl()

}if(b[i]

>=

0&&b[i]

<

16&&

(yu==

2||yu==3)

)}return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}node dr()

}if(b[i]

>=

0&& b[i]

<

16&&

(yu ==

2|| yu ==3)

)}return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}node ru()

}if((

(yu ==

1|| yu ==3)

&&(chu ==

0|| chu ==

4|| chu ==5)

)||(chu ==2)

&&(yu ==

0|| yu ==2)

)}return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}node rd()

}if((

(yu ==

1|| yu ==3)

&&(chu ==

0|| chu ==

4|| chu ==5)

)||(chu ==2)

&&(yu ==

0|| yu ==2)

)}return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}node c()

}if(cfg[b[i]])

tmp[i]

= cfs[0]

[b[i]];

}return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}node cc()

}if(cfg[b[i]])

tmp[i]

= cfs[1]

[b[i]];

}// for (int i = 0; i < 4; ++i)

// cout << b[i] << ':';

// cout << endl;

return

node

(tmp[0]

, tmp[1]

, tmp[2]

, tmp[3]

, step +1)

;}};

queue q;

map<

int,

bool

> mp;

//判重

intbfs

(int b1,

int b2,

int b3,

int b4)

;int

main()

;//0前面,1右側面,2後面,3左側面,4上面,5底面

for(

int i=

0;i<6;

++i)

else

}else

}各個面開始的loc}}

//for(auto x:b)coutbfs(b[0]

,b[1

],b[2]

,b[3])

}int

bfs(

int b1,

int b2,

int b3,

int b4)

return-1

;}/*11

1100

0011

1111

1111

1111

1100

1111

1111

1110

1011

1111

1101

1010

0111

1111

1111

1111

11*/

特殊的二階魔方

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述魔方大家應該都玩過。現在有乙個特殊的二階魔方,它只有一面是白色,其餘五個面全是黑色。玩這個魔方當然也有特殊的規則,玩家只能通過六種方式去改變它,底層向左轉一格 稱為dl 底層向右轉一格 稱為dr 右側向上轉一格 稱為ru 右側向...

Pocket Cube二階魔方

hdu5983的一道題,看錯了輸入,看了題解發現用一位陣列存比較方便。開兩個24的陣列存完直接暴力交換就完事了,搞了兩個小時,才發現這麼簡單,真是自閉魔方。include using namespace std int a 30 b 30 int isok return1 void cpy intm...

二階魔方萬能還原公式 二階魔方復原玩法

二階魔方的玩法分為三個步驟,分別是 1 還原底層角塊 2 還原頂面顏色 3 調整頂層角塊,每步結束後分別要達到下圖中的各個狀態。為了更好的說明,圖中灰色部分代表了該步驟中不相關的顏色,只用看標彩色的方塊就行了。第一步 還原底層角塊 這一步我們要將底層的4個角塊都復原,非常簡單,只需要記乙個演算法就好...