資源簡介
用c語言實現CFOP解魔方算法,算法部分參考一篇用C#實現CFOP的博客,寫的很詳細,很適合學習。代碼很好
代碼片段和文件信息
//?Mf1.cpp?:?定義控制臺應用程序的入口點。
//參考這篇博客寫的,非常感謝博主:http://www.diy-robots.com/?page_id=46
#include?“stdafx.h“
#include?
#include?
#include?
/*初始白對攝像頭,綠色朝下
1白->上翻綠
2綠->右翻紅
3紅->右翻藍
4藍->右翻橙
5橙->右翻上翻黃
6黃
生成的解魔方公式依照:U:頂面->白,F:前面->綠?R:右面->紅,B:后面->藍,L:左面->橙,D:下面->黃
*/
/*還原公式如:D3?U2?B1?表示底面順時針旋轉90*3=270度?頂面順時針旋轉180度?后面旋轉90度*/
//魔方數據結構:
int?cubiedata[6][9]?=?{//這是存儲魔方六個面色塊的數組,可以修改這里改變魔方色塊
516
214
222//頂面1白
333
624
646//前面2綠
154
332
524//右面3紅
351
641
331//后面4藍
456
355
245//左面5橙色
412
661
561//底面6黃
};//魔方初始化
//這是一堆安安靜靜的靜態變量?
static?int??x[]?=?{?01020304??51525354??12143234???012023034041???521514543532?};
static?int??y[]?=?{?71511131??17577737??53353553???820220020620???268068668868?};
static?int?tablesize[]?=?{?1?4096?6561?4096?256?1536?13824?576?};
static?char*?perm?=?“AIBJTMROCLDKSNQPEKFIMSPRGJHLNTOQAGCEMTNSBFDHORPQ“;
static?char*?bithash?=?“TdXhQaRbEFIJUZfijeYV“;
static?char*?order?=?“AECGBFDHIJKLMSNTROQP“;
static?char*?faces?=?“RLFBUD“;
static?char*?FBRLUD?=?“FBRLUD“;
char??str1[68];
char??str2[68];
int?val[20];
int?pos[20];
int?ori[20];
int?move[20];
int?moveamount[20];
int?phase?=?0;
char*?tables[8];
char?argv[20][3];
int?tb_length?=?0;
int?CHAROFFSET?=?65;
int?out_num?=?0;
char?sOutput[200];
void?twist(int?i?int?a);
void?filltable(int?ti);
void?reset(void);//pos初始化0~19,ori初始化‘\0‘
void?GetResult(void);?//獲取魔方還原公式
void?setposition(int?t?int?n);
void?domove(int?m);
void?cycle(int?p[]?char?a[]?int?offset);
void?numtoperm(int?p[]?int?n?int?o);
char*?getCubie(int?data[6][9]);?//將魔方數據化
char?Numb_Tochar(int?numb);
char?ToChar(int?value);//得到int對應的字符
int?getposition(int?t);
int?Char2Num(char?c);//進去char,出來??int
int?permtonum(int?p[20]?int?offset);
int?IndexOf(char?argv_of);//?摘要:
//?????報告指定?Unicode?字符在此字符串中的第一個匹配項的索引。
//
//?參數:
//???value:
//?????要查找的?Unicode?字符。
//
//?返回結果:
//?????如果找到該字符,則為?value?的從零開始的索引位置;如果未找到,則為?-1。
bool?searchphase(int?movesleft?int?movesdone?int?lastmove);
char?Numb_Tochar(int?numb)
{
switch?(numb)
{
case?1:return???‘1‘;?break;
case?2:return???‘2‘;?break;
case?3:return???‘3‘;?break;
case?4:return???‘4‘;?break;
case?5:return???‘5‘;?break;
case?6:return???‘6‘;?break;
case?7:return???‘7‘;?break;
case?8:return???‘8‘;?break;
case?9:return???‘9‘;?break;
case?0:return???‘0‘;?break;
default: break;
}
};
//將魔方數據字符化,如:FR?BL?UL?FL?UB?UF?DR?DB?BR?DL?DF?UR?FRU?DBR?LUB?FDR?FLD?BDL?LFU?URB(這是上面的數組信息轉化過來的魔方色塊位置信息,不懂可以去上面給的網站上面看看)
char*?getCubie(int?data[6][9])?
{
int?temp;
int?i?j?k?=?0?k2?=?0;
int?data2[6][9];
//str1?=?null;
for?(i?=?0;?i?6;?i++)
{
for?(j?=?0;?j?9;?j++)
{
printf(“%d“?data[i][j]);
data2[i][j]?=?data[i][j];
};
printf(“\n“);
}
for?(temp?=?0;?temp?23;?temp
評論
共有 條評論