MoveTree * MoveTree_insert(MoveTree * node, const char * state, const char * moves) { if(node==NULL) return MoveTree_create(state,moves); int cmp=strcmp(state,node->state); if(cmp==0){ if(strlen(moves)<strlen(node->moves)){ free(node->moves); node->moves=strdup(moves); } } else if(cmp<0) node->left=MoveTree_insert(node->left,state,moves); else if(cmp>0) node->right=MoveTree_insert(node->right,state,moves); return node; }
//movetree_print void generateAllHelper(MoveTree * root, int n_moves, const char * state, char * movelist, int ind) { if (ind == n_moves) return; int i; const char * validMoves = "UDLR"; for(i=0;i<strlen(validMoves); i++){ char m = validMoves[i]; char *dup_state = strdup(state); int result = move(dup_state,m); if(result==TRUE){ movelist[ind] = m; movelist[ind + 1] = '\0'; MoveTree_insert(root,dup_state,movelist); generateAllHelper(root,n_moves, dup_state, movelist, ind+1); } free(dup_state); } }