python代码求解战术计算统筹图关键路径长度#tkinter库#提供用户接口设计

战术计算——统筹图关键路径长度的求解

一、用户接口设计
1、战术计算中统筹图题干条件一般如下图所示,题干包括了工作代号id,紧前工作previous,持续时间time。我设计的算法就是通过指导用户根据格式将题干条件一并输入在文本框。
在这里插入图片描述
2、统筹图输入示例:工作A(对应输入1)的工期为3(对应输入3),A没有紧前工作(对应输入0);工作B(对应输入2)的工期为4(对应输入4),B的紧前工作是A(对应输入1);工作C(对应输入3)的工期是5(对应输入5),C的紧前工作是A(对应输入1),则应输入:1,3,0,2,4,1,3,5,1(半角逗号)。备注:ABCDEFG~Z分别用1234567···表示。
3、用户按照要求输入字符串后,将字符串格式化的伪代码如下:

def AOE_topology(base_Num):
    # 将输入字符串去掉逗号存入变量base_Num,返回一个列表
    base_Num = base_Num.split(",")
    # 返回L,L = base_Num长度除以3
    L = (len(base_Num) // 3for i in range(L):
        # 依次将第i层第一个值pro_id(当前工作代号)赋给A1
        A1 = eval(base_Num[i*3])  
        # 依次将第i层第二个值require_time(当前工作权重)赋给A2
        A2 = eval(base_Num[i*3+1])  
        # 依次将第i层第三个值previous(当前工作的紧前工作)赋值给A3 此时A3是连在一起的整数形式
        A3 = base_Num[i*3+2]
        # 将A3转换成字符串后再转换成列表,此时A4已经将A3转换为分割开的整数形式
        A4 = list(str(A3))  
        new_numbers = []
        # 去掉A4中字符串中的逗号
        for n in A4:
            new_numbers.append(int(n))
            A4 = new_numbers
        B = A4
        # 将每一层数据执行Pro
        C = Pro(A1, A2, B, pro_list)
        return C

二、求解统筹图中关键路径长度的代码
算法思想:从第一层数据开始检查当前工作X的id,如果为0,则返回0。如果不为0,则依次遍历当前工作X的紧前工作,并将每次遍历得到的紧前工作的路径长度+当前工作X的工作时间time,并将每次得到的和存储在一个列表中,取最大值则就是当前工作X的关键路径长度。伪代码如下:

class Pro:
    def __init__(self, pro_id, require_time, previous, pro_list):
        self.pro_id = pro_id
        self.require_time = require_time
        self.previous = previous
        pro_list.append(self)

    # def ShowSelf(self):
        # print(self.pro_id,self.require_time,self.previous)
    def run(self):
        total = 0
        tmp = []
        if self.pro_id == 0:
            return 0
        a = len(self.previous)
        for x in range(a):
            tmp.append(pro_list[self.previous[x]].run() + self.require_time)
        # print(tmp)
        total = max(tmp)
        # print(total)
        return total

三、交互界面效果:
在这里插入图片描述结果展示:
在这里插入图片描述四、需要改进之处
1、用户输入字符串格式可以改进为大写字母代替数字。比如A,4,0,B,3,A,C,2,A可以提高用户使用体验;
2、使用try-except提供用户输入错误提示;
3、在每一层循环中加入计数器用来计算每一项工作的最早完成时间和最迟完成时间。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页