为跳棋实施游戏树
Implementing a Game Tree for Checkers
我想实现一个游戏树,它可以在每个级别有任意数量的节点,基本上我正在为跳棋开发 AI,我想实现一个用于 minimax 的游戏树 algorithm.This是我的代码,我正在处理第一种插入情况,即当树为空时....但是当我尝试访问根目录下的数据时,我的程序崩溃了!有帮助吗?? :/
#include <iostream>
using namespace std;
struct Node {
Node **child;
int data;
};
class Tree {
public:
Node *root;
Tree() {
root = NULL;
}
private:
void add(Node *r, int data, int size) {
if (r == NULL) {
Node *newnode = new Node;
newnode->child = new Node*[size];
for (int i = 0; i < size; ++i) {
newnode->child[i] = new Node;
newnode->child[i]->child = 0;
}
newnode->data = data;
r = newnode;
}
}
public:
void add(int data, int size) {
add(root, data, size);
}
};
int main() {
Tree t;
t.add(5, 20);
cout << t.root->data << endl;
return 0;
}
问题出在您按值传递 r 的私有添加函数中。所以当你设置 r = newnode 时,你实际上是在为一个局部指针变量设置地址,它不会影响 root。解决方法如下:
class Tree {
public:
Node *root;
Tree() {
root = NULL;
}
private:
void add(Node **r, int data, int size) {
if (*r == NULL) {
Node *newnode = new Node;
newnode->child = new Node*[size];
for (int i = 0; i < size; ++i) {
newnode->child[i] = new Node;
newnode->child[i]->child = 0;
}
newnode->data = data;
*r = newnode;
}
}
public:
void add(int data, int size) {
add(&root, data, size);
}
};
你做错的是:
r = newnode;
r是你必须做的局部变量
root = newnode;
您的代码将起作用。
希望对您有所帮助
我想实现一个游戏树,它可以在每个级别有任意数量的节点,基本上我正在为跳棋开发 AI,我想实现一个用于 minimax 的游戏树 algorithm.This是我的代码,我正在处理第一种插入情况,即当树为空时....但是当我尝试访问根目录下的数据时,我的程序崩溃了!有帮助吗?? :/
#include <iostream>
using namespace std;
struct Node {
Node **child;
int data;
};
class Tree {
public:
Node *root;
Tree() {
root = NULL;
}
private:
void add(Node *r, int data, int size) {
if (r == NULL) {
Node *newnode = new Node;
newnode->child = new Node*[size];
for (int i = 0; i < size; ++i) {
newnode->child[i] = new Node;
newnode->child[i]->child = 0;
}
newnode->data = data;
r = newnode;
}
}
public:
void add(int data, int size) {
add(root, data, size);
}
};
int main() {
Tree t;
t.add(5, 20);
cout << t.root->data << endl;
return 0;
}
问题出在您按值传递 r 的私有添加函数中。所以当你设置 r = newnode 时,你实际上是在为一个局部指针变量设置地址,它不会影响 root。解决方法如下:
class Tree {
public:
Node *root;
Tree() {
root = NULL;
}
private:
void add(Node **r, int data, int size) {
if (*r == NULL) {
Node *newnode = new Node;
newnode->child = new Node*[size];
for (int i = 0; i < size; ++i) {
newnode->child[i] = new Node;
newnode->child[i]->child = 0;
}
newnode->data = data;
*r = newnode;
}
}
public:
void add(int data, int size) {
add(&root, data, size);
}
};
你做错的是:
r = newnode;
r是你必须做的局部变量
root = newnode;
您的代码将起作用。
希望对您有所帮助