Problem 2 Finished.

This commit is contained in:
Alex Huddleston 2017-10-30 16:45:17 +00:00
parent d7dae370f9
commit 9f01313edf
5 changed files with 71 additions and 9 deletions

View file

@ -1 +1 @@
((3,12,8),(2,4,6),(14,5,2))
((3,8,(7,(3,0,7),(8,8,2))),(4,(7,9,8),8),(((3,6,4),2,6),((9,2,9),4,7,(6,4,5)),4,(6,4,5)))

View file

@ -16,6 +16,7 @@ using namespace std;
// Perform min/max on this tree.
void minmax(node *n)
{
if(n->getLevel() % 2 == 0)
{
int max = n->getValue();
@ -23,16 +24,32 @@ void minmax(node *n)
{
for(int c = 0; c < n->getChildren().size(); c++)
{
n->getChildAt(c)->setBeta(n->getBeta());
n->getChildAt(c)->setAlpha(n->getAlpha());
cout << "Alpha: " << n->getAlpha() << " Beta: " << n->getBeta() << endl;
minmax(n->getChildAt(c));
if(n->getChildAt(c)->getValue() > max)
{
max = n->getChildAt(c)->getValue();
}
if(n->getChildAt(c)->getValue() > n->getAlpha())
{
n->setAlpha(n->getChildAt(c)->getValue());
}
if(n->getAlpha() >= n->getBeta())
{
cout << "Beta pruning" << endl;
break;
}
}
}
n->setValue(max);
cout << n->getValue() << endl;
//cout << n->getValue() << endl;
}
else
@ -42,16 +59,32 @@ void minmax(node *n)
{
for(int c = 0; c < n->getChildren().size(); c++)
{
n->getChildAt(c)->setBeta(n->getBeta());
n->getChildAt(c)->setAlpha(n->getAlpha());
cout << "Alpha: " << n->getAlpha() << " Beta: " << n->getBeta() << endl;
minmax(n->getChildAt(c));
if(n->getChildAt(c)->getValue() < min)
{
min = n->getChildAt(c)->getValue();
}
if(n->getChildAt(c)->getValue() < n->getBeta())
{
n->setBeta(n->getChildAt(c)->getValue());
}
if(n->getBeta() <= n->getAlpha())
{
cout << "Alpha pruning." << endl;
break;
}
}
}
n->setValue(min);
cout << n->getValue() << endl;
//cout << n->getValue() << endl;
}
}
@ -73,6 +106,7 @@ void printTree(node n)
tuple<node, string> makeTree(string input, node n, int level)
{
bool negate = false;
char tempc;
string tempn = "";
@ -88,13 +122,17 @@ tuple<node, string> makeTree(string input, node n, int level)
input = "";
}
cout << "testing" << endl;
// If the char is a number.
if(isdigit(tempc))
{
tempn += tempc;
}
else if(tempc == '-')
{
negate = true;
}
// If the char is a comma.
else if(tempc == ',')
{
@ -102,10 +140,16 @@ tuple<node, string> makeTree(string input, node n, int level)
{
node tempnode;
tempnode.setLevel(level);
tempnode.setValue(stoi(tempn));
int negatemp = stoi(tempn);
if(negate)
{
negatemp = -negatemp;
}
tempnode.setValue(negatemp);
tempnode.setParent(&n);
n.addChild(tempnode);
tempn = "";
negate = false;
}
}
@ -116,10 +160,16 @@ tuple<node, string> makeTree(string input, node n, int level)
{
node tempnode;
tempnode.setLevel(level);
tempnode.setValue(stoi(tempn));
int negatemp = stoi(tempn);
if(negate)
{
negatemp = -negatemp;
}
tempnode.setValue(negatemp);
tempnode.setParent(&n);
n.addChild(tempnode);
tempn = "";
negate = false;
}
tuple<node, string> tempt(n, input);
return tempt;
@ -192,6 +242,7 @@ int main(int argc, char **argv)
tree = makeTree(input.substr(1), root, 1);
root = get<0>(tree);
printTree(root);
minmax(&root);
printTree(root);

View file

@ -1 +1 @@
((3,8,(7,(3,0,7),(8,8,2))),(4,(7,9,8),8),(((3,6,4),2,6),((9,2,9),4,7,(6,4,5)),4,(6,4,5)))
(((-2,-11,10),(2,15,13),(-1,-16,-16)),((-20,13,20),(-13,7,-19),(7,3,4)),((-20,-9,-14),(-4,-6,-12),(11,18,-3)))

View file

@ -7,6 +7,8 @@ node::node()
parent = NULL;
level = 0;
value = 0;
alpha = INT_MIN;
beta = INT_MAX;
}
node::node(node* n)
@ -15,5 +17,7 @@ node::node(node* n)
level = n->getLevel();
value = n->getValue();
children = n->getChildren();
alpha = n->getAlpha();
beta = n->getBeta();
}

View file

@ -2,6 +2,7 @@
#define NODE_H
#include <vector>
#include <limits.h>
using namespace std;
@ -12,6 +13,8 @@ class node
int level;
int value;
vector<node> children;
int alpha;
int beta;
public:
node();
node(node *n);
@ -25,6 +28,10 @@ class node
void addChild(node n) { children.push_back(n); };
vector<node> getChildren() { return children; };
node* getChildAt(int i) { return &children.at(i); };
void setAlpha(int a) { alpha = a; };
int getAlpha() { return alpha; };
void setBeta(int b) { beta = b; };
int getBeta() { return beta; };
};
#endif