int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //initialize rootcube //FILE *fp; //fp = freopen ("rubix.txt", "w", stdout); printf("sizeof(&rootCube->face)=%u\n", sizeof((&rootCube)->face)); ZeroMemory(&rootCube, sizeof(rootCube)); rootCube.parent = NULL; rootCube.lastMove = -1; rootCube.depth = 0; GetFacesString(&rootCube, startCube); printf("starting cube\n"); printCube(&rootCube); //initialize solved cube GetFacesString(&solvedCube, g_szSolvedCubeFaces); printf("target solution\n"); printCube(&solvedCube); struct Cube_t test; CopyMemory(&test, &solvedCube, sizeof(struct Cube_t)); transformCube(&test, MOVE_RACW); transformCube(&test, MOVE_RACW); transformCube(&test, MOVE_LACW); transformCube(&test, MOVE_BCW); transformCube(&test, MOVE_LACW); transformCube(&test, MOVE_BACW); transformCube(&test, MOVE_BCW); transformCube(&test, MOVE_LACW); transformCube(&test, MOVE_BACW); transformCube(&test, MOVE_LACW); //transformCube(&test, MOVE_BACW); printf("test cube\n"); printCube(&test); CopyMemory(&rootCube, &test, sizeof(struct Cube_t)); int g; struct Cube_t *result; LARGE_INTEGER liStart, liFinish, liFrequency; QueryPerformanceFrequency(&liFrequency); for (g=0;g<g_uMaxDepth;g++) { QueryPerformanceCounter(&liStart); result = expandGeneration(&rootCube, g); if (result != NULL) break; QueryPerformanceCounter(&liFinish); printf("Cubes at generation %3u: %10u (new: %10u); time taken: %8.6f s\n", g, countCubes(&rootCube, -1), countCubes(&rootCube, g+1), (double)(liFinish.QuadPart-liStart.QuadPart)/(double)liFrequency.QuadPart); } if (result != NULL) { printMoveSequence(result); putchar('\n'); printCube(result); } else { printf("no solution found\n"); } pause(); return 0; }
int main(int argc, char *argv[]) { // check some type sizes debug_size(rootCube.face); debug_size(Cube); debug("\n"); // initialize solved cube Cube_Init(&solvedCube); if (!Cube_LoadTiles(&solvedCube, SOLVED_CUBE_STR, "FURDBL")) { fatal(0, "Failed to load solved cube"); } printf("Target solution:\n"); printCube(&solvedCube); putchar('\n'); // initialize problem cube Cube_Init(&rootCube); rootCube.depth = 0; assert(sizeof(rootCube.face) == sizeof(solvedCube.face)); verify(memcpy(rootCube.face, solvedCube.face, sizeof(rootCube.face)) == rootCube.face); transformCube(&rootCube, MOVE_RACW); transformCube(&rootCube, MOVE_RACW); transformCube(&rootCube, MOVE_LACW); transformCube(&rootCube, MOVE_BCW); transformCube(&rootCube, MOVE_LACW); transformCube(&rootCube, MOVE_BACW); transformCube(&rootCube, MOVE_BCW); transformCube(&rootCube, MOVE_LACW); transformCube(&rootCube, MOVE_BACW); //transformCube(&rootCube, MOVE_LACW); //transformCube(&rootCube, MOVE_BACW); verify(Cube_ValidateTiles(&rootCube)); printf("Cube initial state:\n"); printCube(&rootCube); putchar('\n'); // solve cube Cube *result; for (int gen = 0; gen < 8; gen++) { result = expandGeneration(&rootCube, gen); if (result != NULL) break; printf("Generation %2d: %10u cubes (%10u new)\n", gen, countCubes(&rootCube, -1), countCubes(&rootCube, gen + 1)); } if (result != NULL) { printMoveSequence(result); putchar('\n'); printCube(result); } else { printf("no solution found\n"); } //pause(); return 0; }
void Option() { int opt; Point cube_dest[8]; printf("\n1. X- axis \n 2. Y - axis \n"); printf("Enter your option:"); scanf("%d",&opt); switch(opt) { case 1: { float mat[3][3]={ {1,0,0}, {0,1,0}, {0,0,-1} }; transformCube(cube_vertex,mat, cube_dest); glColor3f(0.5, 0.8, 0.5); drawCube(cube_dest); glFinish(); } break; case 2: { float mat[3][3]={ {-1,0,0}, {0,1,0}, {0,0,1} }; transformCube(cube_vertex,mat, cube_dest); glColor3f(0.5, 0.8, 0.5); drawCube(cube_dest); glFinish(); } break; default: return; } }