# 無向
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