亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

流程圖獲取深度,求各位算法高手幫幫忙

流程圖獲取深度,求各位算法高手幫幫忙

慕森王 2018-11-21 17:14:11
最近這個問題困擾我半天,我有以下json數據其中,prev_node代表上一個節點,next_node為下一節點.如果prev_node為Null,則代表當前為第一個節點.next_node為null為最后一個節點.根據數據得到以下流程圖求當前深度最深的流程有哪些節點,和流程的有幾個分支注:節點只能向下走
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

#!/usr/bin/python

# coding: utf-8



def build_graph(nodes=[]):

    graph = {}

    for node in nodes:

        if not node['prev_node']:      # root node

            if 'root' not in graph:

                graph['root'] = []

            graph['root'].append(node['next_node'])

        else:

            if node['prev_node'] not in graph:

                graph[node['prev_node']] = []

            if node['next_node']:

                graph[node['prev_node']].append(node['next_node'])

    return graph



def travel(node, graph={}):

    # print(node)

    if not graph[node]:

        return 1, [node]   # branch, node


    max_nodes = []

    max_branches = 0

    for i in graph[node]:

        branches, nodes = travel(i, graph)

        if len(nodes) > len(max_nodes):

            max_nodes = nodes

        max_branches += branches

    max_nodes.append(node)

    return max_branches, max_nodes


if __name__ == '__main__':


    nodes = [

        {"prev_node": "0000000000000005","next_node": "0000000000000006"},

        {"prev_node": "0000000000000006","next_node": "0000000000000007"},

        {"prev_node": "0000000000000006","next_node": "0000000000000008"},

        {"prev_node": "0000000000000008","next_node": "0000000000000012"},

        {"prev_node": "0000000000000009","next_node": "0000000000000010"},

        {"prev_node": "0000000000000010","next_node": "0000000000000011"},

        {"prev_node": "0000000000000014","next_node": "0000000000000015"},

        {"prev_node": "0000000000000015","next_node": "0000000000000016"},

        {"prev_node": "0000000000000016","next_node": "0000000000000017"},

        {"prev_node": "0000000000000018","next_node": "0000000000000019"},

        {"prev_node": "0000000000000020","next_node": "0000000000000021"},

        {"prev_node": "0000000000000019","next_node": "0000000000000020"},

        {"prev_node": "0000000000000012","next_node": "0000000000000022"},

        {"prev_node": "0000000000000022","next_node": "0000000000000023"},

        {"prev_node": "0000000000000023","next_node": "0000000000000009"},

        {"prev_node": "0000000000000011","next_node": "0000000000000024"},

        {"prev_node": "0000000000000024","next_node": "0000000000000014"},

        {"prev_node": "0000000000000017","next_node": "0000000000000025"},

        {"prev_node": "0000000000000025","next_node": "0000000000000018"},

        {"prev_node": "0000000000000007","next_node": "0000000000000021"},

        {"prev_node": None, "next_node": "0000000000000005"},

        {"prev_node": "0000000000000021", "next_node": None}

    ]

    graph = build_graph(nodes)

    branches, nodes = travel('root', graph)


    print("branch num: %d" % branches)

    print("max depth branch:")

    for i in nodes[::-1]:

        print(i)


branch num: 2

max depth branch:

root

0000000000000005

0000000000000006

0000000000000008

0000000000000012

0000000000000022

0000000000000023

0000000000000009

0000000000000010

0000000000000011

0000000000000024

0000000000000014

0000000000000015

0000000000000016

0000000000000017

0000000000000025

0000000000000018

0000000000000019

0000000000000020

0000000000000021


查看完整回答
反對 回復 2018-12-15
  • 1 回答
  • 0 關注
  • 600 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號