兄弟萌,话不多说,show me the code!
"""图的邻接表表示"""
class GraphNode(object):
"""节点类"""
def __init__(self,_elem=None):
self._elem = _elem # 数据域
self._next = None # 指针域
class Graph(object):
"""图类"""
def __init__(self):
"""初始化一个序列"""
self._graph = []
def createPeak(self,newNode):
"""创建一个图顶点"""
self._graph.append(newNode)
return self._graph
def createSide(self):
"""创建图的边"""
for node in self._graph:
graphNode = node
print(f"请输入{graphNode._elem}的邻接点,以-1结束")
while True:
_graphNode = GraphNode() # 初始化每个节点的邻接点
end = input("请输入: ")
if end == '-1':
self.printGraph()
break
else:
"""临时列表图中的节点值,用来后续判断"""
temp = []
for item in self._graph:
temp.append(item._elem)
if end not in temp:
"""输入的邻接节点不在顶点中"""
print("输入的节点不属于图中的顶点,重新输入")
continue
elif end == graphNode._elem:
"""输入的顶点就是当前顶点"""
print("输入的是当前节点,重新输入")
continue
else:
# 新建节点
_graphNode._elem = end
# 指针向后移
_graphNode._next = graphNode._next
graphNode._next = _graphNode
graphNode = graphNode._next
def printGraph(self):
"""遍历当前节点列表"""
for node in self._graph:
print(f"顶点{node._elem}的邻接链表: ",end='')
while node != None:
if node._next != None:
print(f'{node._elem}-->',end='')
else:
print(f'{node._elem}', end='')
node = node._next
print() # 换节点,换行
if __name__ == '__main__':
count = int(input('请输入顶点个数: '))
s = Graph()
# 创建节点
peakNodeStr = input('请输入顶点: ')
peakNodes = peakNodeStr.split(' ')
# 将输入的节点实例化之后添加到图的链表中
for peakNode in peakNodes:
peak = GraphNode(peakNode)
s.createPeak(peak)
print('图中的节点:',end='')
for peak in s._graph:
print(peak._elem,end=' ')
print()
# 创建边
s.createSide()