mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
f740e1e7a1
* Add minimax * Rename Backtracking/minimax.cpp to backtracking/minimax.cpp * Wrap a long line
28 lines
700 B
C++
28 lines
700 B
C++
#include <cmath>
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
using std::cout;
|
|
using std::endl;
|
|
using std::max;
|
|
using std::min;
|
|
using std::vector;
|
|
|
|
int minimax(int depth, int node_index, bool is_max, vector<int> scores,
|
|
int height) {
|
|
if (depth == height)
|
|
return scores[node_index];
|
|
|
|
int v1 = minimax(depth + 1, node_index * 2, !is_max, scores, height);
|
|
int v2 = minimax(depth + 1, node_index * 2 + 1, !is_max, scores, height);
|
|
|
|
return is_max ? max(v1, v2) : min(v1, v2);
|
|
}
|
|
|
|
int main() {
|
|
vector<int> scores = { 90, 23, 6, 33, 21, 65, 123, 34423 };
|
|
int height = log2(scores.size());
|
|
|
|
cout << "Optimal value: " << minimax(0, 0, true, scores, height) << endl;
|
|
}
|