5 【Python】关于排序的问题

attachments-2017-08-bJKvHi1b5982b99a31cb

如图所示,左边为对应关系,右边为网络关系图,想要实现的效果是:
    输入 1个数字后,返回这个数字形成的所有路径,并列表输出。
例子:
input: 3  
output: ['3','9'] 
             ['3','5','10']
             ['3','8','6']
             ['3','8','10']

寻思了几日,本来想结合 if while for 循环遍历的各种嵌套,最后发现还是不行,决定求助大家。
特此向大神学习。

在网上看到一篇 http://blog.csdn.net/bone_ace/article/details/46718683 ,不知道有没有帮助。
谢谢大家

请先 登录 后评论

1 个回答

祝让飞 - 生物信息工程师

丢给你一段代码


class Node(object):
    def __init__(self, name):
        self.parents =[]
        self.nexts = []
        self.name=name

def build():
    _list=[(1,2),(3,5),(3,9),(8,6),(3,8),(5,10),(2,10),(2,3),(8,10),(8,3)]
    _map={}
    for n in _list:
        if n[0] in _map:
            n1=_map[n[0]]
        else:
            n1=Node(n[0])
        if n[1] in _map:
            n2 = _map[n[1]]
        else:
            n2 = Node(n[1])
        n2.parents.append(n1)
        n1.nexts.append(n2)
        _map[n[0]]=n1
        _map[n[1]] = n2
    return _map

_map=build();
def join_path(k):
    _lists=[]
    def path(_map,k,_list):
        list1=_list.copy()
        list1.append(_map[k])
        if _map[k] in set(_list) or len(_map[k].nexts)==0:
            _lists.append(list1)
        else:
            for n in _map[k].nexts:
                path(_map,n.name,list1)
    path(_map,k,[])
    return _lists
        # return _list
########
for k in (1,2,3):
    _lists=join_path(k)
    print('join '+str(k)+'_________')
    for ls in _lists:
        ns=[]
        for l in ls:
            ns.append(l.name)
        print(ns)

请先 登录 后评论