時限:1000ms 記憶體限制:10000k 總時限:3000ms
魔方大家應該都玩過。現在有乙個特殊的二階魔方,它只有一面是白色,其餘五個面全是黑色。玩這個魔方當然也有特殊的規則,玩家只能通過六種方式去改變它,底層向左轉一格(稱為dl),底層向右轉一格(稱為dr),右側向上轉一格(稱為ru),右側向下轉一格(稱為rd),內側順時針轉一格(稱為c),內側逆時針轉一格(稱為cc)。現給一魔方的狀態,請在最少的步驟內把魔方還原
按照上下左右前後的順序給出各面的具體情況,0表示白色,1表示黑色。上下、左右、前後分別是以俯檢視、左檢視、正檢視看到的
輸出令一面全為白色的最小步數。
000011
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個角塊都復原,非常簡單,只需要記乙個演算法就好...