第二个,你说的切割要每个单元不能为空吧
我运行了一下,结果好像不对,是随机删除四条弧,再重新生成四条新弧哦 JeremyFeng 发表于 2018-11-16 12:51
我运行了一下,结果好像不对,是随机删除四条弧,再重新生成四条新弧哦
开始没看到0做起点和终点 塔利班 发表于 2018-11-16 12:55
开始没看到0做起点和终点
是我没有表达清楚,不好意思,0是一个初始站和结束站,这是严格要求的 那你最开始把开头结尾的去掉,后边再加上就行了 塔利班 发表于 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)
你用这段代码生成的序列做也可以 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, ...
恩 塔利班 发表于 2018-11-16 11:41
第二个,你说的切割要每个单元不能为空吧
是的,切割单元不能为空,兄台,帮我敲一下图片里面的这个,谢谢 你一步步让敲这么多,是该收费的,都是帮写作业了 塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了
借鉴学习{:5_104:} 塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了
楼主可以帮写一个作业吗,有报酬 JeremyFeng 发表于 2018-12-8 11:03
楼主可以帮写一个作业吗,有报酬
OK,你Q多少 1620438678 塔利班 发表于 2018-12-8 11:10
OK,你Q多少
1620438678 塔利班 发表于 2018-12-8 11:10
OK,你Q多少
嘿,兄台 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') 塔利班 发表于 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 算法代码,这个程序的输入只是一个例子 塔利班 发表于 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)
塔利班 发表于 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)
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]