sách gpt4 ai đã đi

Triển khai cây trò chơi bằng C++

In lại 作者:行者123 更新时间:2023-11-30 03:03:27 33 4
mua khóa gpt4 Nike

我将把国际象棋游戏表示为 C++ 结构。我认为,最好的选择是树结构(因为在每个深度我们都有几个可能的移动)。

这是一个好的方法吗?

struct TreeElement{
SomeMoveType move;
TreeElement *parent;
std::vector children;
};

如何高效地将这类数据存储在文件中?有没有办法确保整个树结构将存储在内存的同一部分,这将允许使用 mmap 函数?

1 Câu trả lời

要将数据存储在内存的同一部分,您可能需要为 std::vector 提供一个分配器对象。你使用,并从你的 block 中分配。

为了能够序列化它,而不是存储实际的指针,您可以考虑在 block 中存储偏移量。然后当你读回数据时,你可以将 block 的起始地址添加到每个偏移量以将其转回一个地址。

根据您使用的操作系统/编译器,可能已经对此提供了一些支持。比如微软的编译器支持__based指针,这几乎就是我所描述的:一个基地址,每个基于该地址的指针实际上只是一个偏移量,而不是一个完整的指针。提到mmap表示您可能无法直接使用它,但khả thi您正在使用的编译器/操作系统有类似的东西。否则,您可能必须自己完成这项工作(例如,使用 based_pointer 类)。

真正的问题是您为什么要尝试序列化移动树。在典型情况下,您最好只保存当前棋盘位置(或者,大约等效地,移动历史记录)并在需要时/如果需要从中重新生成移动树。它足够小,非常容易存储。

关于博弈树的C++实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350417/

33 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com