圖(Node)Python

# 無向
class Node(object):
    def __init__(self, id):
        self.id = id
        self.relate = set()  

    def get_id(self):
        return self.id

    def get_relate(self):
        return self.relate

    def get_info(self):
        return self.id, self.relate

    def is_relate(self, node):
        return (self.id in node.relate) and (node.id in self.relate)

    def add_relate(self, nodes):
        for node in nodes:
            self.relate.add(node.id)
            node.relate.add(self.id)

    def del_relate(self, nodes):
        for node in nodes:
            if self.is_relate(node):
                self.relate.remove(node.id)
                node.relate.remove(self.id)

    def del_node(self, nodes):
        self.del_relate(nodes)
        del self


# 有向
class NodeD(object):
    def __init__(self, id):
        self.id = id
        self.relate_in = set()
        self.relate_out = set()
        self.relate_both = set()

    def get_id(self):
        print('ID:', self.id)
        return self.id

    def get_relate_in(self):
        print('relate_in: ', self.relate_in)
        return self.relate_in

    def get_relate_out(self):
        print('relate_out: ', self.relate_out)
        return self.relate_out

    def get_relate_both(self):
        print('relate_both: ', self.relate_both)
        return self.relate_both

    def get_info(self):
        node_id, node_in, node_out, node_both = self.get_id(), self.get_relate_in(), self.get_relate_out(), self.get_relate_both()
        return node_id, node_in, node_out, node_both

    def is_relate_both(self, node):
        return (self.id in node.relate_both) and (node.id in self.relate_both)

    def is_relate_in(self, node):
        if self.is_relate_both(node):
            return True
        else:
            return (node.id in self.relate_in) and (self.id in node.relate_out)

    def is_relate_out(self, node):
        return node.is_relate_in(self)

    def is_relate(self, node):
        return self.is_relate_in(node) or self.is_relate_out(node) or self.is_relate_both(node)

    def add_relate_both(self, node):
        if not self.is_relate_both(node):
            if self.is_relate_in(node):
                self.relate_in.remove(node.id)
                node.relate_out.remove(self.id)
            if self.is_relate_out(node):
                self.relate_out.remove(node.id)
                node.relate_in.remove(self.id)
            self.relate_both.add(node.id)
            node.relate_both.add(self.id)

    def add_relate_in(self, node):
        if not self.is_relate_in(node):
            if self.is_relate_out(node):
                self.relate_out.remove(node.id)
                node.relate_in.remove(self.id)
                self.relate_both.add(node.id)
                node.relate_both.add(self.id)
            else:
                self.relate_in.add(node.id)
                node.relate_out.add(self.id)

    def add_relate_out(self, node):
        if not self.is_relate_out(node):
            if self.is_relate_in(node):
                self.relate_in.remove(node.id)
                node.relate_out.remove(self.id)
                self.relate_both.add(node.id)
                node.relate_both.add(self.id)
            else:
                self.relate_out.add(node.id)
                node.relate_in.add(self.id)

    def del_relate_both(self, node):
        if self.is_relate_both(node):
            self.relate_both.remove(node.id)
            node.relate_both.remove(self.id)

    def del_relate_in(self, node):
        if self.is_relate_both(node):
            self.del_relate_both(node)
            self.relate_out.add(node.id)
            node.relate_in.add(self.id)
        else:
            if self.is_relate_in(node):
                self.relate_in.remove(node.id)
                node.relate_out.remove(self.id)

    def del_relate_out(self, node):
        node.del_relate_in(self)

    def del_relate_all(self, node):
        self.del_relate_both(node)
        self.del_relate_in(node)
        self.del_relate_out(node)

    def del_node(self, nodes):
        for node in nodes:
            self.del_relate_all(node)
        del self

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章