我有一个Python类:
class PointInfo(object):
def __init__(self, pnt, vect, src1, src2, fun):
self.point = pnt
self.vector = vect
self.src1 = src1
self.src2 = src2
self.func = fun
我已经创建了一个列表(imp\u list),该列表的每个元素都是PointInfo类型的对象,source1或source2可以引用某个基点(以“Original”开头),或者它们包含该列表中上一个元素的索引,该索引通过该元素创建了该对象。你知道吗
每个对象的构造都像(source1函数source2)函数是一些布尔运算,现在我想追溯每个点,找出每个点的来源,直到到达基点为止。你知道吗
例如,如果我有这样一个列表:
如果我想追溯点0的来源,它必须给我:(Ori1 & Ori2)
或者点1的来源必须给我:(Ori3 | (Ori1 & Ori2))
或者第2点从哪里来,必须给我:(Ori4 ^ (Ori1 & Ori2))
或者第3点的来源必须给我:(Ori5 & (Ori3 | (Ori1 & Ori2)))
以此类推,如何通过python实现这一点?你知道吗
有一种方法可以实现:
这是基本思想。您可能需要根据数据结构对代码进行一些调整。你知道吗
编辑
我使用给定的类使用以下列表测试了您的代码:
结果是:
所以,很显然这是可行的。你知道吗
只需使用@user2963623给出的递归过程执行深度优先搜索。递归的重要部分是:
确定基本情况
参数如何通过递归调用更改
当当前级别结束时,我们返回到它的上级是什么样的结果
在您的特定情况下,给定一个点x,您可以继续跟踪
src1
或src2
或两者的“链接”,直到到达“原点”<强>1。基本情况:
如果
src1
和src2
都以“origin”开头,则返回它<强>2。递归探索
“src1”,如果它有到其他点的“链接”
或'src2',如果它有一个'链接'到其他点
或'src1'和'src2',如果两者都有到另一点的'link'
相关问题 更多 >
编程相关推荐