二階魔方:
8個角塊的位置均可進行任意互換(8!種狀態),如果以乙個角塊不動作為參考角塊,其他7個角塊都能任意轉換方向(即37種狀態)。如果在空間中旋轉則不計算方向不同而狀態相同的魔方,實際上的準確狀態數還應除以24。所以二階魔方的總狀態數應該為:
二階魔方的最遠復原距離(即最需要最多步驟復原的狀態)為11次全旋轉,或者14次普通旋轉,此結果可以用計算機使用brute force
演算法計算出。
旋轉次數
進行全旋轉復原的魔方的狀態數
進行普通旋轉復原的魔方的狀態數01
1196
254273
321120
41847
5345
9992
2256
650136
8969
7227536
33058
8870072
114149
91887748
360508
10623800
930588
112644
1350852
12782536
1390280
14276
雖然復原距離不是很大,但是用bfs的話效率還是太低了。。。。把資料輸入進去,然後就可以喝茶了。。。。
#include #include #include #include #include #include #include using namespace std;
struct muofang
m;string q1("前1 "),q2("前2 "),z1("左1 "),z2("左2 "),s1("上1 "),s2("上2 ");
string _0("0"),_1("1"),_2("2"),_3("3"),_4("4"),_5("5");
setst;
bool _ck(muofang m,int a,int b,int c,int d)
bool ck(muofang m)
int count_ck(muofang m)
muofang zhuan(muofang m,int a,int b,int c,int d, int e,int f, int g,int h, int i,int j, int k,int l)
muofang qian1(muofang m)
muofang qian2(muofang m)
muofang zhuo1(muofang m)
muofang zhuo2(muofang m)
muofang shang1(muofang m)
muofang shang2(muofang m)
string gethash(muofang m)
return hh;
}bool panchong(muofang u)
{ string hh=gethash(u);
if(st.count(hh)) return false;
st.insert(hh);
// cout< "
st.clear();
muofang u,v,tm;
q.push(m);tm=m;
panchong(m);
bool flag=false;
while(!q.empty())
{u=q.front(); q.pop();
// cout<
魔方陣2 偶階魔方陣(四的倍數)
上一次介紹了奇階魔方陣的實現,今天來介紹偶階魔方陣 四的倍數 的實現。偶階魔方陣的實現步驟 1.用橫線和豎線將n階方陣劃分為m個4 4的小方陣 2.將n n個數從小到大,從左到右,從上到下依次填入方陣中,遇到4 4小方陣的對角線不填 此位置不填的數不作為下乙個位置填入的數 3.將n n個數從大到小,...
特殊的二階魔方
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述魔方大家應該都玩過。現在有乙個特殊的二階魔方,它只有一面是白色,其餘五個面全是黑色。玩這個魔方當然也有特殊的規則,玩家只能通過六種方式去改變它,底層向左轉一格 稱為dl 底層向右轉一格 稱為dr 右側向上轉一格 稱為ru 右側向...
任意階魔方陣演算法的實現
魔方陣,古代又稱 縱橫圖 是指組成元素為自然數1 2 n的平方的n n的方陣,其中每個元素值都不相等,且每行 每 列以及主 副對角線上各n個元素之和都相等。以下是 演算法嵌入到注釋中 reference from include 輸出陣列 int printa int magic,int n pri...