1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fcs_user.h"
#ifdef DMALLOC
#include "dmalloc.h"
#endif
char * my_fcs_move_to_string(fcs_move_t move)
{
char string[256];
switch(move.type)
{
case FCS_MOVE_TYPE_STACK_TO_STACK:
sprintf(string, "Move %i cards from stack %i to stack %i",
move.num_cards_in_sequence,
move.src_stack,
move.dest_stack
);
break;
case FCS_MOVE_TYPE_FREECELL_TO_STACK:
sprintf(string, "Move a card from freecell %i to stack %i",
move.src_freecell,
move.dest_stack
);
break;
case FCS_MOVE_TYPE_FREECELL_TO_FREECELL:
sprintf(string, "Move a card from freecell %i to freecell %i",
move.src_freecell,
move.dest_freecell
);
break;
case FCS_MOVE_TYPE_STACK_TO_FREECELL:
sprintf(string, "Move a card from stack %i to freecell %i",
move.src_stack,
move.dest_freecell
);
break;
case FCS_MOVE_TYPE_STACK_TO_FOUNDATION:
sprintf(string, "Move a card from stack %i to the foundations",
move.src_stack
);
break;
case FCS_MOVE_TYPE_FREECELL_TO_FOUNDATION:
sprintf(string, "Move a card from freecell %i to the foundations",
move.src_freecell
);
break;
default:
string[0] = '\0';
break;
}
return strdup(string);
}
int main(int argc, char * argv[])
{
void * user;
FILE * in;
char buffer[2048];
int ret;
fcs_move_t move;
user = freecell_solver_user_alloc();
in = fopen("/home/shlomi/progs/freecell-test/0000.board", "rt");
fread(buffer, sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), in);
fclose(in);
freecell_solver_user_limit_iterations(user, 10000);
ret = freecell_solver_user_solve_board(user, buffer);
if (ret == FCS_STATE_SUSPEND_PROCESS)
{
freecell_solver_user_limit_iterations(user, -1);
ret = freecell_solver_user_resume_solution(user);
}
if (ret == FCS_STATE_WAS_SOLVED)
{
while (freecell_solver_user_get_next_move(user, &move) == 0)
{
char * string;
string = my_fcs_move_to_string(move);
printf("\n%s\n", string);
free(string);
}
}
freecell_solver_user_free(user);
return 0;
}
|