python图的邻接表表示

兄弟萌,话不多说,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()

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值