bool canWin(vector<int>& data, vector<bool>& visited, int index) { if (index<0 || index>=data.size()) return false; if (visited[index]==true) return false; if (data[index]==0) return true; visited[index]=true; int newIdx=index+data[index]; if (canWin(data, visited, newIdx)) return true; newIdx=index-data[index]; if (canWin(data, visited, newIdx)) return true; visited[index]=false; return false; }
unsigned int AIShell::winWays(int**& state, int player, struct timeval& start) { unsigned int result = 0; for(int i = 0; i < numCols; i++) { for(int j = 0; j < numRows; j++) { if(state[i][j] == player) { std::string dirList[8]= {"N", "S", "W", "E", "NW", "NE", "SW", "SE"}; for (int p=0; p<=7; p++) { if(canWin(state, i, j, 0, player, dirList[p], start) == k) {result++;} if(!isUnderLimit(start)) {return result;} } } if(!isUnderLimit(start)) {return result;} } if(!isUnderLimit(start)) {return result;} } return result; }
int ComputerPlayer::takeTurn(Board boards[], int nextBoard) { if (level == 1) { if (boards[nextBoard].hasWinner() != 0) { for (int i = 8; i >= 0; i--) { if (boards[nextBoard].getSpace(i) == 0) return i; } } int c = canWin(boards[nextBoard]); if (c != -1) return c; int priority[] = {6, 2, 0, 8, 4, 3, 5, 7, 1}; for (int i = 0; i < 9; i++) { if (boards[nextBoard].getSpace(priority[i]) == 0) return priority[i]; } return 0; } if (level == 2) { if (boards[nextBoard].hasWinner() != 0) { for (int i = 8; i >= 0; i--) { if (boards[nextBoard].getSpace(i) == 0) return i; } } int max = -10000; int maxIndex = 0; for (int i = 0, h = boards[nextBoard].gt.root->children.size(); i < h; i++) { int s = boards[nextBoard].gt.root->children[i]->score; if (s > max) { max = s; maxIndex = i; } } return boards[nextBoard].gt.root->children[maxIndex]->move; } return 3; }
bool canWin(string s) { if (s.size() == 0) { return false; } for (size_t i = 0; i < s.size() - 1; ++i) { if (s[i] == '+' && s[i + 1] == '+') { s[i] = '-'; s[i + 1] = '-'; if (!canWin(s)) { return true; } s[i] = '+'; s[i + 1] = '+'; } } return false; }
bool canWin(string& s) { if(s.length()<2) return false; for(int i=0; i<s.length()-1; i++){ if(s[i]=='+' && s[i+1]=='+'){ s[i] = '-'; s[i+1] = '-'; bool win = canWin(s); s[i] = '+'; s[i+1] = '+'; if(!win) return true; } } return false; }
bool canWin(string s) { if (!lookup_.count(s)) { const int n = s.length(); bool is_win = false; for (int i = 0; !is_win && i < n - 1; ++i) { if (s[i] == '+') { for (; !is_win && i < n - 1 && s[i + 1] == '+'; ++i) { s[i] = s[i + 1] = '-'; is_win = !canWin(s); s[i] = s[i + 1] = '+'; lookup_[s] = is_win; } } } } return lookup_[s]; }
QPoint BoardStatus::getNextStep() { if (this->isEmpty()) { return getBoardCenter(); } lookForward(); if (canWin()) { updateStatus(); lookForwardOnce(); } addChessAt(this->nextStep[0]->x(), this->nextStep[0]->y(), whiteChess); //printTypeNum(); return *this->nextStep[0]; }
bool canWin(string s) { for (int i = -1; (i = s.find("++", i + 1)) >= 0; ) { if (!canWin(s.substr(0, i) + '-' + s.substr(i+2))) return true; } return false; }
bool canWin(vector<int> data, int index) { int n=data.size(); vector<bool> visited(n, false); return canWin(data, visited, index); }