• 大小: 12KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: CFOP  

资源简介

用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

评论

共有 条评论

相关资源