JeremyFeng 发表于 2018-11-16 12:51:03

塔利班 发表于 2018-11-16 11:41
第二个,你说的切割要每个单元不能为空吧

我运行了一下,结果好像不对,是随机删除四条弧,再重新生成四条新弧哦

塔利班 发表于 2018-11-16 12:55:48

JeremyFeng 发表于 2018-11-16 12:51
我运行了一下,结果好像不对,是随机删除四条弧,再重新生成四条新弧哦

开始没看到0做起点和终点

JeremyFeng 发表于 2018-11-16 12:58:59

塔利班 发表于 2018-11-16 12:55
开始没看到0做起点和终点

是我没有表达清楚,不好意思,0是一个初始站和结束站,这是严格要求的

塔利班 发表于 2018-11-16 13:00:12

那你最开始把开头结尾的去掉,后边再加上就行了

JeremyFeng 发表于 2018-11-16 13:02:31

塔利班 发表于 2018-11-16 12:55
开始没看到0做起点和终点

from random import randint,sample
station=
demand=[-7,-3,-3,0,10,6,3,-5,0,0,9,4,-3,-6,4,-7,-3,4,-7,4]
L=list(zip(station,demand))
print(L)
print('-'*40)
length=len(L)
你用这段代码生成的序列做也可以

塔利班 发表于 2018-11-16 13:09:26

JeremyFeng 发表于 2018-11-16 13:02
from random import randint,sample
station=
demand=[-7,-3,-3,0,10,6,3,-5,0,0,9,4,-3,-6,4,-7,-3,4, ...

JeremyFeng 发表于 2018-11-17 11:05:29

塔利班 发表于 2018-11-16 11:41
第二个,你说的切割要每个单元不能为空吧

是的,切割单元不能为空,兄台,帮我敲一下图片里面的这个,谢谢

塔利班 发表于 2018-11-17 11:08:15

你一步步让敲这么多,是该收费的,都是帮写作业了

JeremyFeng 发表于 2018-11-17 14:46:27

塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了

借鉴学习{:5_104:}

JeremyFeng 发表于 2018-12-8 11:03:51

塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了

楼主可以帮写一个作业吗,有报酬

塔利班 发表于 2018-12-8 11:10:28

JeremyFeng 发表于 2018-12-8 11:03
楼主可以帮写一个作业吗,有报酬

OK,你Q多少

JeremyFeng 发表于 2018-12-8 11:17:42

1620438678

JeremyFeng 发表于 2018-12-8 11:18:36

塔利班 发表于 2018-12-8 11:10
OK,你Q多少

1620438678

JeremyFeng 发表于 2018-12-10 11:36:12

塔利班 发表于 2018-12-8 11:10
OK,你Q多少

嘿,兄台

塔利班 发表于 2018-12-10 11:48:58

import re
f=open('12.10.txt')
di=) for x in re.findall('\d -?\d+',f.read())]
f.close()
a=int(input('请输入α值:'))
g1=lambda a:a*10
g2=lambda a,d:a*(10+d)
g3=lambda a:a*20
num=
p=
pp=
q=
print('序号','di','pi','p\'i','qi',sep='\t')
for each in zip(num,di,p,pp,q):
    print(*each,sep='\t')

JeremyFeng 发表于 2018-12-10 13:13:30

塔利班 发表于 2018-12-10 11:48


#-*- coding: utf-8 -*-

topo = { 1 : {2 : 2, 3 : 5},
         2 : {1 : 0, 3 : 2, 4 : 2},
         3 : {1 : 0, 2 : 0, 4 : 3},
         4 : {2 : 0, 3 : 0} }

def init_dis(s, t, dis):
    if s == t: return
    for node in topo:
      if topo > 0 and dis == 0:
            dis = dis + 1
            init_dis(s, node, dis)

def get_augment_path(s, t, dis, pre, remain):
    if s == t: return remain
    for node, cap in topo.items():
      if cap > 0 and dis == dis + 1 and pre == 0:
            if remain > cap: remain = cap
            pre = s
            rst = get_augment_path(node, t, dis, pre, remain)
            if rst != 999:
                topo = topo - rst
                topo = topo + rst
                print(s ,'->',node )
                print(topo)
                return rst
            else: # 回溯
                rst = get_augment_path(node, t, dis, pre, remain)
                if rst != 999:
                  topo = topo - rst
                  topo = topo + rst

                  return rst
    else: # 没有允许弧,更新d
      min_d = 999
      for node in topo:
            if dis + 1 < min_d and topo > 0: min_d = dis + 1
      dis = min_d

    return 999

def sap(s, t):
    dis =
    init_dis(1, 4, dis)
    flow = 0

    while dis < len(topo):
      pre =
      rst = get_augment_path(1, 4, dis, pre, 999)
      if rst != 999: flow = flow + rst

    print (flow)

if __name__ == '__main__':
    sap(1, 4)
   
这是最大流sap 算法代码,这个程序的输入只是一个例子

JeremyFeng 发表于 2018-12-10 13:18:08

塔利班 发表于 2018-12-10 11:48


#-*- coding: utf-8 -*-

topo = { 1 : {2 : 2, 3 : 5},
         2 : {1 : 0, 3 : 2, 4 : 2},
         3 : {1 : 0, 2 : 0, 4 : 3},
         4 : {2 : 0, 3 : 0} }

def init_dis(s, t, dis):
    if s == t: return
    for node in topo:
      if topo > 0 and dis == 0:
            dis = dis + 1
            init_dis(s, node, dis)

def get_augment_path(s, t, dis, pre, remain):
    if s == t: return remain
    for node, cap in topo.items():
      if cap > 0 and dis == dis + 1 and pre == 0:
            if remain > cap: remain = cap
            pre = s
            rst = get_augment_path(node, t, dis, pre, remain)
            if rst != 999:
                topo = topo - rst
                topo = topo + rst
                print(s ,'->',node )
                print(topo)
                return rst
            else: # 回溯
                rst = get_augment_path(node, t, dis, pre, remain)
                if rst != 999:
                  topo = topo - rst
                  topo = topo + rst

                  return rst
    else: # 没有允许弧,更新d
      min_d = 999
      for node in topo:
            if dis + 1 < min_d and topo > 0: min_d = dis + 1
      dis = min_d

    return 999

def sap(s, t):
    dis =
    init_dis(1, 4, dis)
    flow = 0

    while dis < len(topo):
      pre =
      rst = get_augment_path(1, 4, dis, pre, 999)
      if rst != 999: flow = flow + rst

    print (flow)

if __name__ == '__main__':
    sap(1, 4)
   

JeremyFeng 发表于 2018-12-10 13:22:39

塔利班 发表于 2018-12-10 11:48


topo = { 1 : {2 : 16, 3 : 13, 4 : 13, 5 : 5 , 6 : 2},
         2 : {1 : 0, 5 : 10, 9 : 10 },
         3 : {1 : 0, 2 : 0, 4 : 10, 7 : 10},
         4 : {1 : 0, 3 : 0 , 6 : 10 , 10 : 10},
         5 : {1 : 0, 2 : 0 , 3 : 10 , 8 : 10},
         6 : {1 : 0 , 4 : 0 , 7 : 10 , 10 : 10},
         7 : {3 : 0 , 6 : 0 , 8 : 10 , 10 : 10},
         8 : {5 : 0 , 7 : 0 , 9 : 10 , 10 : 10},
         9 : {2 : 0 , 8 : 0 , 10 : 10},
         10 : {6 : 0 , 7 : 0 , 8 : 0 , 9 : 0} }

def init_dis(s, t, dis):
    if s == t: return
    for node in topo:
      if topo > 0 and dis == 0:
            dis = dis + 1
            init_dis(s, node, dis)

def get_augment_path(s, t, dis, pre, remain):
    if s == t: return remain
    for node, cap in topo.items():
      if cap > 0 and dis == dis + 1 and pre == 0:
            if remain > cap: remain = cap
            pre = s
            rst = get_augment_path(node, t, dis, pre, remain)
            if rst != 999:
                topo = topo - rst
                topo = topo + rst
                print(s ,'->',node )
                print(topo)
                return rst
            else: # 回溯
                rst = get_augment_path(node, t, dis, pre, remain)
                if rst != 999:
                  topo = topo - rst
                  topo = topo + rst
                  return rst
    else: # 没有允许弧,更新d
      min_d = 999
      for node in topo:
            if dis + 1 < min_d and topo > 0: min_d = dis + 1
      dis = min_d

    return 999

def sap(s, t):
    dis =
    init_dis(1, 10, dis)
    flow = 0

    while dis < len(topo):
      pre =
      rst = get_augment_path(1, 10, dis, pre, 999)
      if rst != 999: flow = flow + rst

    print (flow)

if __name__ == '__main__':
    sap(1, 10)

塔利班 发表于 2018-12-10 15:40:55

topo = { 1 : {2 : 16, 3 : 13, 4 : 13, 5 : 5 , 6 : 2},
         2 : {1 : 0, 3 : 10,5 : 10, 9 : 10 },
         3 : {1 : 0, 2 : 0, 4 : 10, 5: 0 , 7 : 10},
         4 : {1 : 0, 3 : 0 , 6 : 10 , 10 : 10},
         5 : {1 : 0, 2 : 0 , 3 : 10 , 8 : 10},
         6 : {1 : 0 , 4 : 0 , 7 : 10 , 10 : 10},
         7 : {3 : 0 , 6 : 0 , 8 : 10 , 10 : 10},
         8 : {5 : 0 , 7 : 0 , 9 : 10 , 10 : 10},
         9 : {2 : 0 , 8 : 0 , 10 : 10},
         10 : {4: 0 , 6 : 0 , 7 : 0 , 8 : 0 , 9 : 0} }

def init_dis(s, t, dis):
    if s == t: return
    for node in topo:
      print(node,t)
      if topo > 0 and dis == 0:
            dis = dis + 1
            init_dis(s, node, dis)

def get_augment_path(s, t, dis, pre, remain):
    if s == t: return remain
    for node, cap in topo.items():
      if cap > 0 and dis == dis + 1 and pre == 0:
            if remain > cap: remain = cap
            pre = s
            rst = get_augment_path(node, t, dis, pre, remain)
            if rst != 999:
                topo = topo - rst
                topo = topo + rst
                print(s ,'->',node )
                print(topo)
                return rst
            else: # 回溯
                rst = get_augment_path(node, t, dis, pre, remain)
                if rst != 999:
                  topo = topo - rst
                  topo = topo + rst
                  return rst
    else: # 没有允许弧,更新d
      min_d = 999
      for node in topo:
            if dis + 1 < min_d and topo > 0: min_d = dis + 1
      dis = min_d

    return 999

def sap(s, t):
    dis =
    init_dis(1, 10, dis)
    flow = 0

    while dis < len(topo):
      pre =
      rst = get_augment_path(1, 10, dis, pre, 999)
      if rst != 999: flow = flow + rst

    print (flow)

if __name__ == '__main__':
    sap(1, 10)
页: 1 [2]
查看完整版本: 随机交换字典里面的键值对,急急急