std::pair get_move(Node* n) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if ((n->state.small_board[i][n->state.player] & (1 << j)) != (n->parent->state.small_board[i][n->state.player] & (1 << j))) { int R = i / 3; int C = i % 3; int r = j / 3; int c = j % 3; return std::make_pair(R * 3 + r, C * 3 + c); } } } return std::make_pair(-1, -1); } Node* get_child(Node* n, int i, int j) { uint16_t r = i / 3; uint16_t c = j / 3; uint16_t sr = i % 3; uint16_t sc = j % 3; uint16_t sq = r * 3 + c; uint16_t mv = sr * 3 + sc; bool next_player = n->state.player ^ 1; /* std::printf("%d children\n", n->num_children); */ for (int i = 0; i < n->num_children; i++) { Node* c = n->children[i]; /* std::printf("BIGBOI\n"); */ if ((c->state.small_board[sq][next_player] & (1 << mv)) != 0) { return c; } } std::printf("You dumbo\n"); return nullptr; }