1. 機器人還原魔方利用什麼技術
用到了很多技術,整個機器人主要分成上位機和下櫻配位機兩大部分。上位高李機主要是顏色識別技術(識別攝脊念指像頭採集到的圖片中的顏色)和設計魔方還原演算法的技術。下位機主要是實現機器人閉環自動控制電機轉子轉動到適宜的位置。
2. 樂高EV3解魔方機器人的程序講解
魔方機器人顏色檢測完之後是有大概幾十秒鍾的停頓的,因為要進行解魔方的步驟計算。
3. nome機器人魔方如何 還原正方體
機器人魔方敗首槐還原,
應該不是人腦能做的。
好像也學不來,
真的是太復雜芹返了察友!
還是玩自己的的吧!
用自己的方法,
找到樂趣就是最好的。
4. 求魔方的演算法 我指的是計算機編程演算法 最好有C++ 或C#的源代碼
具體做法:
方法一;
/*此程序使我按照上面介紹的魔方陣的規律編寫的,不過只能求奇數唯譽魔方陣,經過測試可以算到508階*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N],i,j,k;
for(i=0;i<N;i++) /*先處理第一行*/
for(j=0;j<N;j++)
{
a[i][j]=0; /*先令所有元素都為0*/
}
j=(N-1)/2; /*判斷j的位置*/
a[0][j]=1; /*將1放在第一行中間一列*/
for(k=2;k<=N*N;k++) /*再從2開始處理*/
{
i=i-1; /*存放的行比前一個數的行數減1*/
j=j+1; /*存放指罩段的列比前一個數的列數加1*/
if((i<0)&&(j==N)) /*前一個數是第一行第N列時,把下悶脊一個數放在上一個數的下面*/
{
i=i+2;
j=j-1;
}
else
{
if(i<0) /*當行數減到第一行,返回到最後一行*/
i=N-1;
if(j>N-1) /*當列數加到最後一行,返回到第一行*/
j=0;
}
if(a[i][j]==0) /*如果該元素為0,繼續執行程序*/
a[i][j]=k;
else /*如果該元素不為0,就說明要填的數的位置已經被占,則該數放在上一個數的下面*/
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=0;i<N;i++) /*輸出數組*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}
方法二:
/*這個是網友qfyzy為幫助我找錯而提供的,可以算到99階*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N]={0},i=0,j,k; /*先令所有元素都為0*/
j=(N-1)/2;
i=0;
for(k=1;k<=N*N;) /*開始處理*/
{
if((i<0)&&(j==N)) /*前一個數是第一行第N列時,把下一個數放在上一個數的下面*/
{
i=i+2;
j=j-1;
}
else if(i<0) /*當行數減到第一行,返回到最後一行*/
i=N-1;
else if(j>N-1) /*當列數加到最後一行,返回到第一行*/
j=0;
else if(!a[i][j]){ /*如果該元素為0,繼續執行程序*/
a[i][j]=k++;
i=i-1;
j=j+1;
}
else /*如果該元素不為0,就說明要填的數的位置已經被占,則該數放在上一個數的下面*/
{
i=i+2;
j=j-1;
}
}
for(i=0;i<N;i++) /*輸出數組*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}
5. 求用計算機解高階魔方(3到30階)還原的演算法
從上面兩面的接觸塊開始,比如大紅面和黃面的接觸那一層的中間那一塊,應該是紅色上黃色下,然後再擺上面的三面接觸塊,比如紅黃白塊,位置努力擺正,然後再下來就是擺中間的兩面塊,最後擺放底層的兩面塊,底層的三面塊。注意的是,有時候擺好的塊會因為要擺放後來的塊被暫時打亂,這個是一定的。
羅羅嗦嗦也沒有說清楚,不好意思,你可以仔細多看幾遍,一定可以把魔方解出來!
解法說明:魔方上全部20個可轉動方塊可以形成43,000,000,000,000,000(四千三
百萬兆)以上的不同組合方式。開解引謎最明顯不過的困難恐怕就在於此。本解法的優
點在於,它設法使你在5步之中的任何時候都只須考慮此一步驟所涉及方塊的不超過30種
組合方式。這20個可轉動方塊的前12個是分別逐一定位的,因此,在大部分時間里,你
都只需要考慮一個方塊的位置問題。
即然一次只須考慮如此少的幾種方塊的組合方式,就完全有可能把它們寫下來並給每一
種情況提供一組適當的轉動方法。因此,不管從哪一種組合情況開始,也不管魔方被扭
得多麼混亂,這一解法都可以保證成功。(注意,如果你拆過魔方,請保證在組裝時沒
有放錯位置。)
標記及術語
在開解魔方的全過程中所使用的魔方6個平面的標准名稱如下:
頂:頂平面(選一種你最喜愛的顏色)
前:前平面
左:左平面
右:右平面
底:底平面
後:後平面---及少使用
一個平面的顏色取決於它的中心方塊(不可轉動)的顏色。你可處選頂平面的顏色,選
定之後,在整個開解過程中要保持不變。注意,右、左、後、以及前平面的顏色根據你
如何持握魔方而可以有所不同。因此,前平面、可以是任何四種顏色之一(通過轉動你
手中的魔方)。一旦確定前平面,則右、後和左平面的顏色和底平面的顏色保持不變(
選定你所喜愛的顏色之後)。在任何一組轉動中,右、左、後和前平面的顏色也保持不
變,但在進行下一組轉動時其顏色就常常會改變。
右+ :將右平面沿順時針方向轉動90度。
右- :將右平面沒逆時針方向轉動90度。
右2 :將右平面轉動180度(此時順逆時針效果相同)。
前+ :將前平面沿順時針方向轉動90度。
前- :將前平面沿逆時針方向轉動90度。
前2 :將前平面轉動180度。
左+ :將左平面沿順時針方向轉動90度。
左- : 將左平面沿逆時針方向 轉動90度。
左2 : 將左平面轉動180度。
底+ :將底平面沿順時針方向轉動90度。
底- :將底平面沿逆時針方向轉動90度。
底2 : 將底平面轉動180度。
頂+ :將頂平面沿順時針方向轉動90度。
頂- :將頂平面沿順時針方向轉動90度。
頂2 :將頂平面轉動180度。
(本解法不用轉動後面)
順逆時針以各面為鍾面為標准.
前右是一個邊緣方塊,它在特定時間內處於前平面和右平面之間的邊緣位置上。前右頂
是一個邊角方塊,它在特定的時間內處於前平面、右平面和頂平面之間的邊角位置上。
因此,12個邊緣方塊為:底前,底左,底後,底右,前左,前右,前頂,左後,左頂,
後右,後頂和右頂。8個邊角方塊為:底前左,底前右,底後左,底後右,前左頂,前右
頂,左後頂和後右頂。任何轉動及其所涉及的方塊一律用上述的術語表示。要使用本文
的開解方法,你必須依一定方向持握魔方使將要移動的方塊與文中所述的方塊相一致。
如果不理解,請看肌?
一個方塊的顏色與它所在的邊緣或邊角位置所應有的顏色相一致時,我們稱它們為位置
正確或安放正確。一個方塊的各面顏色都同它相鄰平面的中心方塊的顏色相一致時,我
們格稱它為方位正確。例如,一個塗有紅、藍和綠的邊角方塊,當它在毗鄰於紅、藍和
綠色的中心方塊的邊角位置上時,就是位置正確,但只有當它紅、藍和綠色的一面公別
與紅、藍和綠色中心方塊相一致時,這一方塊才能算方位正確(方向和位置都正確)。
開解中的5個步驟總結如下:
1.在6種顏色中選出一種你所喜愛的顏色,然後,給那個有此種顏色的中心方塊的平面上
4個邊緣方塊定位和定向(即頂面邊緣)。
2. 給選出的頂平面上的4 個邊角方塊定位和定向(即頂面邊角)。
3.給頂平面下面的一層的4 個邊緣方塊定位和定向(即中層邊緣)。
在1至3步中的全部12個方塊都是逐一分別定位和定向的,到此為止,已完成了三分這二
的方塊。
4. 給底平面上的4 個邊角方塊定位和定向(即底面邊角)。
5. 給底平面上的4 個邊緣方塊定位和定向(即底面邊緣)。
每一 大步一般又都分為2 小步。
---1 給這些方塊逐一定位。
---2 給這些方塊逐一定向。這就需要將這些方塊從它們的正確位置暫時挪開一下,後再
以正確的方向回到它們的原位上去。
-------1------------------------------2------------------ ---------3--------
------------
-----------4---------------
最後的機會:如果你願意,也可以僅僅依靠上面的說明來試試能否自己開解魔方。下面將
介紹一種完整而明確的解法,讀了下面的介紹也許會破壞你用前述的幾條啟示來自己開
解魔方的樂趣。另外,前兩個步驟只是介紹一個平面的完成方法。這是一項相當容易的
任務,你也許願意自己來做這一工作(或者你已經做完了)。第一個關鍵步驟是第3 步
。
第一步 第二步 第三步 第四步 第五步
第一步
第一步 頂面邊緣( 前頂,左頂,後頂,右頂)
在開解之前首選定頂平面的顏色,別忘了,任一平面的顏色都是由它的中心方塊的顏色
決定的。要正確地持握魔方使你所選定的這一平面朝上,這便是頂平面,在全部開解過
程中要保持平面不變。
這一步的目的是要給屬於頂平面的4個邊緣位置的方塊定位和定向。這4 個頂面邊緣方塊
都是逐一被安放和定向的。你要為其中的每一個方塊做下述5個步驟(1A--1E)。如果幸
運的話,也許其中的一兩個方塊碰巧已經在它的正確位置上,那麼,你只要把這5個步驟
(1A--1E)做二至三遍即可。如你對此還有不解之處,請復習有關標楊及術語的內容。
1A:正確持握魔方使前頂部位上並無經安放和定向的方塊。你可能必須在手中轉動整個
魔方以做到這一點,這樣,也將改變前平面的顏色。
1B:找出應屬於這個前頂部位的方塊。這個待解的方塊我們稱之為即需方塊。
1C:如果此一方塊已經在前頂部位,但方向不對,請參照1E辦理。
1D: 這個即需方塊的位置共有11種可能性,為此這里提供11組相應的轉動。根據這個即
需方塊的位置做以下11組轉動中的一組即可。例如,即需方塊目前的位置是右頂部位,
那麼依照右頂至前頂那一組轉動辦理即可。
右頂至前頂轉動法: 右- 前-
後頂至前頂轉動法: 頂+ 右- 頂- 前-
左頂至前頂轉動法: 左+ 前+
前右至前頂轉動法:前-
後右至前頂轉動法:右2 前- 右2
左後至前頂轉動法:左2 前+ 左2
前左至前頂轉動法:前+
底前至前項轉動法:前2
底右至前頂轉動法:底- 前2
底後至前頂轉動法:底2 前2
底左至前頂轉動法: 底+ 前2
1E:如果前頂方塊目前已在正確位置上,但方向不對,請做以下一組定向轉動:
前頂定向轉動法:前- 頂+ 左- 頂-
(這4 個頂面邊緣方塊是逐一定位和定向的,因此你可能需要重復做4 遍1A--1E這5 個
步驟。一旦這一步完成,頂平面上將出現一個十字形圖案(如果你你取綠色為頂面顏色
,就將出現一個綠十字)。
第二步
第2步 頂面邊角(前左頂,前右頂,左後頂,後右頂)
這一步的目的是,在保持已經安放好的頂面邊緣方塊的同時,給4 個應屬於頂面上邊角
位置的方塊定位和定向。在這一系列轉動中,頂面邊緣方塊將被暫時移動,但都會適當
還原的。
對於4個屬於頂面邊角位置的方塊中的每一個,都需要做以下六個步驟(2A--2F)。同樣
,如果你運氣好,以會碰到某個頂面邊角方塊已經在它的正確方位上了,那麼就不必做
夠四遍了。
2A:找出一個還沒有正確定位和定向的頂面邊角方塊(即任意一個應屬於頂面邊角位置
的方塊)。這就是即需方塊。如果這個即需方塊目前已經在正確位置上,只是方向不對
,請參照2E辦理。
2B :如果即需方塊現在位於頂面上,請做以下一組轉動。請按一定方向持握魔方使即需
方違犯處於前右頂部位。
前右頂至底前左轉動法:左- 底- 右+
這一轉動 把即需方塊移到底平面。
2C:轉動底平面,使目前已在底平面上的這個即需方塊稱到它應該占據的那個頂面邊角
部位(這部位以稱為即需部位)的正下方。按一定方向持握魔方使即需部位為前右頂部
位,這時即需部位為前右頂部位,這時即需方塊應該在底面前右的位置上。
2D:為正確安放即需的頂面邊角方塊,做以下一組轉動。
底前右至前右頂轉動法:右- 底- 右+
2E:如前頂方塊的方向不對,做以下兩組轉動之一(注意:只做其中之一)。
前右頂定向轉動法: 右- 底2 右+ 、 前+ 底2 前-
前右頂定向轉動法: 前+ 底2 前- 、 右- 底2 右+
2F :如果前右頂方塊的方向仍不正確,重復你在2E中做過的那組轉動。這將使前右頂方
塊的方向和位置全部正確無誤。
你可能要把這六個步驟(2A--2F)重復四遍才能完成這四個頂面邊角方塊的定位和定向
。做完這些之後,整個魔方的三分之一,也就是全部頂平面的方塊就都依正確方向各就
各位了。
第三步
第3 步 中層邊緣(前左,前右,左後,後右)
這一步的目的是要給頂平面下面的4個邊緣方塊定位和定向。這一步可以被看作是對「中
層平面」的開解。旦完成這一步驟,魔方的三分這二就完成了。對每一個應屬於中層邊
緣位置的方塊,要做如下四個步驟(3A--3D)。你也許會再一次發現某個中層邊緣方塊
已經在它的正確方位上了。
3A:找出一個尚未正確定出方位的中層邊緣方塊(即某個應屬於中層邊緣位置的方塊)
。這就是即需方塊。如果這個即需方塊的位置正確,但方向不對,請參照3D辦理。
3B:如果即需方塊不在底平面上,請做以下一組轉動。依一定方向正確持握魔方,使即
需方塊處於前右部位。
前右至底平面(底後)轉動法:右- 底+ 右+ 底+ 前+ 底- 前-
3C: 這時,既需方塊已經到了底平面.轉動底平面使既需方塊的垂直面的顏色和四個側面
(前,後,左,右)中的一面的中心方塊的顏色相一致.然後正確持握魔方,使即需的
部位為前右部位.如果此時既需方塊位於右平面,做底右至前右的一組轉動.如既需方
塊位於前平面,做底前至前右的一組轉動.
底右至前右轉動法:(底+ 前+ 底-) 前-( 底- 右- 底+) 右+
底前至前右轉動法:(底- 右- 底+) + (底+ 前+ 底-) 前-
3D : 依一定方向持握魔方使既需方塊處於前右部位.如果方向不對,做以下一組定向轉動
.
前右定向轉動法(共15步): (右- 底+ 右+)( 底+ 前+ 底-) 前- (底+ 右- 底+)
右+( 底+ 前+ 底-) 前-
正誤法:
這組轉動比前兩個步驟長.在這一系列轉動的全過程中,只有一個頂面邊角方塊(既原位於
前右頂的方塊)被移到離它的正確方位一次轉動以上的地方.假如你在這幾組的某一組轉
動中失誤或是亂了套,那麼立刻停下來,並設法恢復頂平面.通常情況下,你必須轉動前面
平面或右平面使方塊還原到頂平面,然後,重做幾組第2步的轉動以還原錯了位的頂面邊角
方塊.做完這些後,從3A開始做另一次嘗試.
第四步
第四步 底面邊角(底前左,底前右,第左後,底後右)
這一步是要給第平面上的4個邊角方塊定位和定向.這是通過先定位後定向來完成的.這次
的4個方塊不是分別安放,而是作為一組一次同時完成.依照下述關於4A--4F的說明,一遍
就可以完成著一步驟.
4A:首先有必要轉動底面使盡可能多的邊角方塊各就其位,而暫時不考慮它的方向問題(暫
時也不需要照顧底平面上的邊緣方塊).只要轉動底面就可以使至少2個,有時甚至是全部
4個底平面邊角方塊居於正確的位置.如果還剩下2個位置不對的方塊,它們的位置不外乎
於2個相鄰或兩個相對的邊角上.對於前者,可以做4B的轉動;對於後者,可以做4C的轉動.
4B:如果2個位置不對的位置邊角相鄰,以下一組轉動可以使它們對調位置.
底前左與底前右調位轉動法(注意要正確持握魔方,使即將被調位的2個方塊處於這兩個位
置): ( 右- 底- 右+ )( 前+ 底+ 前-) ( 右- 第+ 右+)底2
4C:如果2個位置不對的邊角方塊相對,以下一組轉動可以使它們調位.
底前左與底後右調位轉動法(注意要正確持握魔方使即將被調位的2個方塊處於這兩個位
置):
( 右- 底- 右+) ( 前+ 底2 前- ) ( 右- 底+ 右+)底+
4D: 至此,4個底面邊角方塊已安放妥當.這時如果這4個底面邊角方向不正確,則按以下方
法轉動.
------這一步只有一種轉動步驟,但要重復使用,只是每次轉動前都要先確定一正確的握
法.
-------握法(這是關鍵):
將需要調整的那一層置於頂層的位置(全過程都如此). 以頂面中心的顏色為標准色.觀察
頂面四邊角是否有標准色塊:
---只有一塊標准色:將這一塊置於頂前左的位置.
同時有兩塊標准色塊:
------a:兩塊相鄰:將兩塊分別置於頂前右與頂後右的位置.
-------b:兩塊相對:將兩塊置於頂前右與頂後左的位置.
沒有一塊: 看側面出現的標准色塊(同樣只看四個邊角方塊上的八個色塊),找到同時出現
兩個標准色塊的那一面,置這一面為左面.
握好魔方就可以開始轉動:
( 右+ 頂+ 右- ) 頂+ ( 右+ 頂2 右-) (就這么簡單,只有這一組轉動)
若做完一組轉動後,若四方塊相對方向不對(這一轉動不會改變它們的相對位置,只是同已
完成的兩層有點錯開,這我們先不必理會)則重新確定握法,繼續重復轉動.直至四邊角方
塊相對方位均正確為止(一般要重復3-5次). 調整頂層,使它邊角方塊顏色與已完成的兩
層相一致,記住將這一層重新置為底面.
第五步
第5步 頂面邊緣 (前底,左底,後底,右底)
看底面邊緣的位置:
----如果沒有一個邊緣方塊方位正確:按5A的轉法做。
----如果只有一個邊緣方塊方位正確:按5B的轉法做。
----有兩個正確的邊緣方塊方位正確:按5C的轉法做。
5A:做如下一組轉動,這次只要保持頂面和底面不變就行了.
( 左- 右+ 前+ )( 左+ 右- 底2)( 左- 右+ 前+)( 左+ 右-)
轉完後看看底面的情況再缺定下一步的轉法。
5B: 正確持握魔方使那個位置或方位已經正確的邊緣方塊處於底前的位置.然後做5A那組
轉動 .轉完後看看底面的情況再缺定下一步的轉法。
5C: 握好魔方使得:
a--正確方塊位置相對:使正確方塊位於底前與底後的位置。
b--正確方塊位置相鄰:使正確方塊處於底前與底右的位置。(未給出圖示)
轉法:(左- 右+ 前+)( 左+ 右- 底-)(左- 右+ 前-) ( 左+ 右- 底-) ( 左-
右+ 前2) (左+ 右-) 不過比較羅嗦,還是看字母再說 建議參考
6. 百變魔方機器人魔方拼正方形怎麼折
百變魔方機叢孫器人魔方拼正方形有以下步驟。
1、變魔尺有十二個白色的三角形,先將四個白色的三角形對折起來。
2、將剩下的三個三角形轉180度,再將兩個白色的三角行轉動180度。
3、將一個白色三角形轉到180度,將滲塵鏈另一邊去三個三角形轉到180度。
4、再將步驟3轉動的三個白色三角形轉動180度,再轉動上一步中的二個三角形180度得到。
5、旋轉兄敏一個白色三角形就完成。
7. 魔方公式高級演算法
第一就是F2L,意思是在拼好底面十字之後,同時還原一組棱塊和角塊,而不是像初級玩法那樣,先單獨還原底面四個角,再還原四條棱。
F2L的公式雖然多,但是記憶起來並不難,玩一段時間之後就能依靠理解來掌握,不用死記硬背。有關F2L的教學,推薦一篇特別好的帖子。
http://bbs.rubik.com.cn/viewthread.php?tid=6116&extra=page%3D1
第二叫做PLL,意思是調整頂面朝向。在初級玩法中,調整頂面朝向「也就是讓頂面的顏色一致」要反復依靠R`U`F`UFR這個公式來達到七種包含十字的圖形之一,然後再用另外兩個公式去還原頂面色。
PLL的區別就是在你還原好底下兩層之後,頂面色朝向的每一種情況都有專門的公式來對應。這一步驟的公式是最多的。
高級玩法最後的步驟叫做OLL,意思是調整頂面排列。
這一步和初級玩法的區別與PLL是一樣的,就是在還原好頂面色的朝向之後,每一種情況都有一個公式相對應。區別是OLL的公式比PLL少很多,記憶也相對容易。
具體的高級玩法教程在這里。
http://www.rubik.com.cn/fridrich.htm
8. 31313EV3魔方機器人程序(*ev3)要能使!!!!!
下面是一些心得體會:
1、編程軟體里要載入mindcuber里提供的優化過的顏色感測器RGB模塊,否者載入程序到主模塊的時候會報錯。
2、固件升級到了1.05
3、用EV3 Home版 31313搭建的時候,好像有幾個轉軸連接件不夠,於是用了幾個9397上的零件。
4、整個機械部分基本問題不大,7歲的兒子按圖都搭下來了,個別不對的地方,很容易就能調過來。
9. 魔方陣演算法是怎麼解出來的
麻煩少少,其實你在網上也可以找到些,種類繁多。
奇數用的是常用的斜線填數法
偶數的演算法是:
當n為4的倍數時:採用對稱元素交換法。首先把數1-n^2按行從上至下,從左至右填人方陣的n×n格。然後,把方陣的所有4 ×4子方陣中的兩對角線上位置上的數固定下來不動;所有其它位置上的數關於方陣中心作對稱交換,也就是把元素a(i,j)與元素a(n+1-i,n+ 1-j)的值交換。
當n為非4倍數的偶數(即4m+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。上述奇數階魔方給分解的4個子方陣對應賦值,上左子方最小(i),下右子次小(i+v),下左子方最大(i+3v),上右子方次大(i+2v),即4個子方陣對應元素相差v,其中v=n*n/4,然後作相應的元素交換:
a(i,j)與a(i+u,j)在同一列做對應交換(j<t或j>n-t+2)
a(t,1)與a(t+u,1);a(t,t)與a(t+u,t)兩對元素交換
其中u=n/2,t=(n+2)/4
我寫的程序:(比較傻的方法,因為昨天太晚了不想優化了:P)
include <stdio.h>
#define N 100
void main()
{
void n1(int n);
void n2(int n);
void n3(int n);
int n;
printf("please input n:");
scanf("%d",&n);
printf("\n");
if((n%2)!=0)
n1(n);
else if((n%4)==0)
n2(n);
else
n3(n);
getch();
}
void n1(int n)
{
int i,j,count=0,num[N][N];
for(i=0,j=(n-1)/2;count<n*n;)
{
count++;
num[i][j]=count;
if(count%n==0)
{
i++;
}
else
{
i--;
j++;
}
if(i<0)
i+=n;
if(j>=n)
j-=n;
}
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%5d",num[i][j]);
count++;
if(count%n==0)
printf("\n");
}
}
void n2(int n)
{
int t,i,j,count=0,num[N][N];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
count++;
num[i][j]=count;
}
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
{
if(i!=j)
{
t=num[i][j];
num[i][j]=num[n-1-i][n-1-j];
num[n-1-i][n-1-j]=t;
}
}
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%5d",num[i][j]);
count++;
if(count%n==0)
printf("\n");
}
}
void n3(int n)
{
int i,j,m,t,v,count=0,num[N][N];
v=(n+2)/4;
m=n/2;
for(i=0,j=(m-1)/2;count<m*m;)
{
count++;
num[i][j]=count;
if(count%m==0)
i++;
else
{
i--;
j++;
}
if(i<0)
i+=m;
if(j>=m)
j-=m;
}
for(i=m,j=(m-1)/2+m;count<2*m*m;)
{
count++;
num[i][j]=count;
if(count%m==0)
i++;
else
{
i--;
j++;
}
if(i<m)
i+=m;
if(j>=2*m)
j-=m;
}
for(i=0,j=(m-1)/2+m;count<3*m*m;)
{
count++;
num[i][j]=count;
if(count%m==0)
i++;
else
{
i--;
j++;
}
if(i<0)
i+=m;
if(j>=2*m)
j-=m;
}
for(i=m,j=(m-1)/2;count<4*m*m;)
{
count++;
num[i][j]=count;
if(count%m==0)
i++;
else
{
i--;
j++;
}
if(i<m)
i+=m;
if(j>=m)
j-=m;
}
for(i=0;i<m;i++)
{
for(j=0;j<v-1||j>n-v+1;j++)
{
t=num[i][j];
num[i][j]=num[i+m][j];
num[i+m][j]=t;
}
for(j=n-v+2;j<n;j++)
{
t=num[i][j];
num[i][j]=num[i+m][j];
num[i+m][j]=t;
}
}
t=num[v-1][0];
num[v-1][0]=num[v+m-1][0];
num[v+m-1][0]=t;
t=num[v-1][v-1];
num[v-1][v-1]=num[v+m-1][v-1];
num[v+m-1][v-1]=t;
count=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%5d",num[i][j]);
count++;
if(count%n==0)
printf("\n");
}
}
10. 人類最快拼好魔方的最高記錄是多少,魔方機器人呢,人比機器你了百分之幾
三階魔方世界紀錄由荷蘭人創造5.55秒
魔方機器人目前3.253秒
摘自網路:
在英國舉行的大爆炸博覽會(Big Bang Fair)上,ARM的兩位工程師David Gilday、Mike Dobson示範了新型機器人「Cubestormer 3」是如何閃電般還原魔方的。
有趣的是,這次表演並不是機器人敬孝單獨完成的,而是配合了一部Exynos八核心的三星Galaxy S4。在吉尼斯世界記錄工作人員的見證下,Cubestormer 3啟動,僅僅用了3.253秒鍾就搞定了魔方。
S4在這里的作用是分析魔方的色塊位置,確定還原步驟,然後指導機器人完成任務。不知道換了亮辯稿高通、NVIDIA、Intel或者蘋果的處理器會怎麼樣?
David Gilday表示,這套系統最難的地方是改善Cubestormer 3與手機之間的通訊,而開發魔方還原軟體和調整機械協作是兩碼事兒,涉及魔方卡住、機器損壞的危險。
Cubestormer 3是該系列機器人的第三代,上一代的魔方還原記錄還是5.27秒,這次一下灶攜子縮短了38%。人類的記錄則是Mats Valk去年創造的5.55秒,差距瞬間拉開。