-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathalpha_beta_pruning.cpp
More file actions
62 lines (52 loc) · 1.38 KB
/
alpha_beta_pruning.cpp
File metadata and controls
62 lines (52 loc) · 1.38 KB
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
#include <iostream>
using namespace std;
#define MIN -1000 //init alpha
#define MAX +1000 //init beta
int minimax(int depth, int nodeIndex, bool maximizingPlayer,
int values[], int alpha, int beta)
{
//base case: leaf node is reached
if (depth == 3)
return values[nodeIndex];
if (maximizingPlayer)
{
int best = MIN;
//recurse for left and right children
for (int i = 0; i < 2; ++i)
{
int val = minimax(depth+1, 2*nodeIndex+i, false,
values, alpha, beta);
best = max(best, val);
alpha = max(alpha, best);
//alpha beta pruning
if (beta <= alpha)
break;
}
return best;
}
else
{
int best = MAX;
//recurse for left and right children
for (int i = 0; i < 2; ++i)
{
int val = minimax(depth+1, 2*nodeIndex+i, true,
values, alpha, beta);
best = min(best, val);
beta = min(beta, best);
//alpha beta pruning
if (beta <= alpha)
break;
}
return best;
}
}
int main()
{
int values[8] = {3, 5, 6, 9, 1, 2, 0, -1};
cout << "Alpha-Beta Pruning..." << endl;
cout << "the optimal minimax value is: ";
cout << minimax(0, 0, true, values, MIN, MAX);
cout << endl;
return 0;
}