话说脑洞略大的我又想出来一个奇葩的方法
基于上面的回溯法
四位二进制数字 依次对应 上左下右(顺序其实不影响最后的结果的)
还是按那个路径走
我们建立3种8个表(数组就好)
1.右边为0的数a 右边为1的数b 8个元素
2.下边为0的数c 下边为1的数d 8个元素
3.下右边为00的数e 下右边为01的数f 4个元素
下右边为10的数g 下右边为11的数h 4个元素

(树状下行时每一次选项的表都要暂存或是通过算法能够从删掉的表中补充进去原来的)保存下来也不多就16个分叉 16个对应的表
从1.种表中选取一个元素作为16号位
从所有表中删去16号位的元素(如果有)
然后看15号位读取16号位的元素的左边数(即二进制数第4位) 它满足1.种表中的其中一个选取对应那个表中的一个数填进去然后从所有表中删掉那个数
其中如果某个表为空后还要读取就宣布渲染失败回溯至上一个分叉读取当前分叉的表选择另外一个数填进去(剪枝)
14 13号亦然 12 8 4号是下边 11 10 9 7 6 5 3 2 1号是下右边
成功渲染出一种表达 输出
然后回溯至上一个分叉选择不同的数如果选择完毕的话就继续回溯
当回溯到第零个分叉时停止 最终实现全部的解
回溯的时候表怎么办??应该也要读取成当前分叉的表
如同撤销一样每次回溯都把低一级的分叉的表和选项剪掉只留下上级分叉的记录保存
逻辑结构好乱 但是理论上应该可以实现复杂度应该比枚举低吧
某不科学の我想出的不科学の方法············