鱼C论坛

 找回密码
 立即注册
查看: 1222|回复: 10

求助,树结构

[复制链接]
发表于 2021-8-2 10:09:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


最近在写一个酒馆战旗计算胜率的算法,最基础的,不考虑英雄和特殊技能,但是要求用树来写,能精确计算出胜率,不能用蒙特卡洛随机模拟来写
我觉得就是要写出每种情况以及对应的概率,最后都加起来就行
求助求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-5 10:15:09 | 显示全部楼层
打工人,打工魂,打工都是人上人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-10 15:42:01 | 显示全部楼层
nahongyan1997 发表于 2021-8-5 10:15
打工人,打工魂,打工都是人上人。

我这不算打工吧,只是我导师想让我练一下写这种结构,就拿酒馆战旗这个运算模式当例子让我练
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-10 16:34:44 | 显示全部楼层
我从网上查了一个,树结构,但是我主要是不会 给一个初始条件  输出最后就是那个树结构,中间计算各个棋子的状态以及自动递归到下一层不知道怎么套进去

这是那个结构
class TreeNode(object):
    """树节点类"""

    def __init__(self, name, parent=None):
        super(TreeNode, self).__init__()
        self.name = name
        self.parent = parent
        self.child = {}

    def __repr__(self) :
        return 'TreeNode(%s)' % self.name


    def __contains__(self, item):
        return item in self.child


    def __len__(self):
        """返回子节点长度"""
        return len(self.child)

    def __bool__(self, item):
        """对存在的节点返回true"""
        return True


    def path(self):
        """返回路径字符串(从根节点到当前节点)"""
        if self.parent:
            return '%s %s' % (self.parent.path.strip(), self.name)
        else:
            return self.name

    def get_child(self, name, defval=None):
        """获取当前节点的子节点"""
        return self.child.get(name, defval)

    def add_child(self, name, obj=None):
        """对当前节点增加一个子节点"""
        if obj and not isinstance(obj, TreeNode):
            raise ValueError('TreeNode only add another TreeNode obj as child')
        if obj is None:
            obj = TreeNode(name)
        obj.parent = self
        self.child[name] = obj
        return obj

    def del_child(self, name):
        """从当前节点删除一个子节点"""
        if name in self.child:
            del self.child[name]

    def find_child(self, path, create=False):
        """通过路径或名字找到子节点, 如果没找到返回None"""
        # 如果输入是字符串,将路径转换为列表
        path = path if isinstance(path, list) else path.split() #如果不是则分割为列表
        cur = self
        for sub in path:
            # 搜索
            obj = cur.get_child(sub)
            if obj is None and create:
                #可以增加需要的新节点
                obj = cur.add_child(sub)
            # 检查搜索是否完成
            if obj is None:
                break
            cur = obj
        return obj

    def items(self):
        return self.child.items()

    def dump(self, indent=0):
        """将树转存为字符串,输出树状结构 """
        tab = '    '*(indent-1) + ' |- ' if indent > 0 else ''
        print('%s%s' % (tab, self.name))
        for name, obj in self.items():
            obj.dump(indent+1)

    def preorder(self,tier=0):
        """先序遍历输出"""
        print('%s' % (self.name))
        for name, obj in self.items():
            obj.preorder(tier+1)


if __name__ == '__main__':
    root = TreeNode('tree') #'tree'
    a1 = root.add_child('a1')
    a1.add_child('b1')
    a1.add_child('b2')
    a1.add_child('b3')
    a1.add_child('b4')
    b3 = a1.add_child('b3')
    b3.add_child('c1')
    b3.add_child('c2')
    c1 = b3.add_child('c1')
    c1.add_child('d1')
    b4 = a1.add_child('b4')
    b4.add_child('c3')
    root.dump()
    root.preorder()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-10 16:36:29 | 显示全部楼层
我之前尝试过在 树结构外面 写那些计算的函数  ,但是最后都不能实现递归,都只有一层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-10 17:16:33 | 显示全部楼层
我感觉就是,每个节点都有数据,然后父节点的数据会影响子节点的个数和数据,这个所谓的影响就是 计算棋子之间相互攻击的函数,然后每层节点都是这样,直到某一方棋子都没了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-11 08:17:12 | 显示全部楼层
撕裂天堂 发表于 2021-8-10 17:16
我感觉就是,每个节点都有数据,然后父节点的数据会影响子节点的个数和数据,这个所谓的影响就是 计算棋子 ...

论坛里有个叫皮卡丘的写了一个五子棋的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-11 08:19:02 | 显示全部楼层
支持联机对战的五子棋小游戏
https://fishc.com.cn/thread-156157-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 15:00:37 | 显示全部楼层
nahongyan1997 发表于 2021-8-11 08:19
支持联机对战的五子棋小游戏
https://fishc.com.cn/thread-156157-1-1.html
(出处: 鱼C论坛)

我看看啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 18:48:18 | 显示全部楼层
nahongyan1997 发表于 2021-8-11 08:19
支持联机对战的五子棋小游戏
https://fishc.com.cn/thread-156157-1-1.html
(出处: 鱼C论坛)

感谢大佬,我看看了很有用,主要是要用博弈树搜索,比我之前单纯想的树结构更细化了,也有资料和例子可查,非常感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-12 18:48:50 | 显示全部楼层
如果我能写出来我会发到论坛里,如果能写的出来的话!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表