美文网首页
最长路径问题

最长路径问题

作者: Sherry_Shen | 来源:发表于2018-03-30 00:53 被阅读0次
  • 题目描述
    现有A、B、C、D、E五个字符,以及M个字符串,每个字符串由这五个字符和1-9的整数间隔组成,如:A2B3D,表示存在A->B 和 B->D的路径,且路径长度为2和3,可以推出A->D的一条路径长为5;
    求最长的一条路径的长度,如果任何一处路径出现环(即出现A->···->A,B->···->B,C->···->C,D->···->D,E->···->E的路径,返回-1)

  • 输入:
    第一行为字符串的个数M
    第二行开始为M个字符串

  • 输出:
    最长的一条路径的长度,如果出现环,返回-1

  • 样例输入:
    4
    A2B3D
    A4C2E
    A5D
    C3B

  • 样例输出:
    10

### 计算每一行可能存在的路径起点终点以及对应的路径长度,不同行中出现的同样起点和终点的路径保留长度最大的    
def v2v(strs):
    d={}
    for s in strs:
        for i in range(0,len(s)-2,2):
            for j in range(i+2,len(s),2):
                key = s[i]+s[j]
                value = sum([int(s[k]) for k in range(i+1,j,2) ])
                if key not in d.keys() or value > d[key]:
                    d[key] = value
                else :
                    pass
    return d

### 判断是否存在环
def is_ring(d):
    s=[]
    for key in d.keys():
        v2v=key[1]+key[0]
        s.append(v2v)
    m=set(s)&set(d.keys())
    if len(m) > 0:
        return 1
    else:
        return 0

### 将能够连接的路径相连合并
def road_join(d):
    keys=list(d.keys())
    values=list(d.values())
    flag=0    
    for i in range(len(keys)):
        for j in range(len(keys)):
            if keys[i][1]==keys[j][0]:
                new_key=keys[i][0]+keys[j][1]
                new_value=values[i]+values[j]
                if new_key not in keys:
                    d[new_key]=new_value
                    flag=1
                elif new_value > d[new_key]:
                    d[new_key]=new_value
                    flag=1
                else:
                    pass
    if flag==1:
        road_join(d)
 
def calculate(M,strs):
    d=v2v(strs)
    flag=is_ring(d)
    if flag==1:
        return -1
    else:
        road_join(d)
        return max(d.values())

##################################       
            
M = int(input())
strs_cnt = M
strs_i =0
strs = []
while strs_i <= strs_cnt:
    strs_item = input()
    strs.append(strs_item)
    strs_i +=1

res = calculate(M,strs)   

相关文章

  • 最长路径问题

    题目描述现有A、B、C、D、E五个字符,以及M个字符串,每个字符串由这五个字符和1-9的整数间隔组成,如:A2B3...

  • 经典DP问题合集

    一、上台阶问题 二、矩阵最小路径和 三、最长递增子序列 四、最长公共子序列 五、背包问题

  • 滑雪场最长路径问题

    解法很简单,遍历求解每个元素的最长深度,有点类似图的深度遍历算法,但是还是有些不同,另外,需要有个中间表用来记录已...

  • ***310. Minimum Height Trees [Me

    310. Minimum Height Trees 方法一:通过BFS找到最长的路径,返回中间的节点,找最长路径的...

  • 数据结构与算法--关键路径

    数据结构与算法--关键路径 关键路径与无环加权有向图的最长路径 现在考虑一个这样的问题:你今天事情比较多,要洗衣服...

  • 最长路径算法

    一、定义 最长路径算法类似于基于拓扑排序的最短路径算法。本文只针对加权有向无环图讨论。 二、基本思想 对于一幅加权...

  • 7. 关键路径

    关键路径 : 从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径 关键路径代表 : 1) 图中最长路径;...

  • 算法: 最长路径与任务规划

    我们通常听得最多的就是最短路径的应用了,但是最长路径却很少听说过,今天就跟大家说说一个最长路径应用的例子。你可能会...

  • 【POJ1088】-DP问题之最长路径

    题目地址:http://poj.org/problem?id=1088 问题描述:一个区域由一个二维数组给出。数组...

  • 687. 最长同值路径

    687. 最长同值路径 每次dfs返回的是以该节点为结尾的最长串长度

网友评论

      本文标题:最长路径问题

      本文链接:https://www.haomeiwen.com/subject/okhbcftx.html