鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: JeremyFeng

[已解决]随机交换字典里面的键值对,急急急

[复制链接]
 楼主| 发表于 2018-11-16 12:51:03 | 显示全部楼层
塔利班 发表于 2018-11-16 11:41
第二个,你说的切割要每个单元不能为空吧

我运行了一下,结果好像不对,是随机删除四条弧,再重新生成四条新弧哦
_8)N)R[BV%$EQR9LW31I_WE.png
QOIT)7_H%FTCSKZ%)Q9DHYS.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

开始没看到0做起点和终点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-16 12:58:59 | 显示全部楼层
塔利班 发表于 2018-11-16 12:55
开始没看到0做起点和终点

是我没有表达清楚,不好意思,0是一个初始站和结束站,这是严格要求的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-16 13:00:12 | 显示全部楼层
那你最开始把开头结尾的去掉,后边再加上就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-16 13:02:31 | 显示全部楼层
塔利班 发表于 2018-11-16 12:55
开始没看到0做起点和终点

from random import randint,sample
station=[i for i in range(1,20)]
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)
你用这段代码生成的序列做也可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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, ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-17 11:05:29 | 显示全部楼层
塔利班 发表于 2018-11-16 11:41
第二个,你说的切割要每个单元不能为空吧

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

兄台,帮敲一下这个

兄台,帮敲一下这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-17 11:08:15 | 显示全部楼层
你一步步让敲这么多,是该收费的,都是帮写作业了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-11-17 14:46:27 | 显示全部楼层
塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了

借鉴学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 11:03:51 | 显示全部楼层
塔利班 发表于 2018-11-17 11:08
你一步步让敲这么多,是该收费的,都是帮写作业了

楼主可以帮写一个作业吗,有报酬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 11:10:28 | 显示全部楼层
JeremyFeng 发表于 2018-12-8 11:03
楼主可以帮写一个作业吗,有报酬

OK,你Q多少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 11:17:42 | 显示全部楼层
1620438678
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-8 11:18:36 | 显示全部楼层

1620438678
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 11:36:12 | 显示全部楼层

嘿,兄台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 11:48:58 | 显示全部楼层
  1. import re
  2. f=open('12.10.txt')
  3. di=[int(x.split()[1]) for x in re.findall('\d -?\d+',f.read())]
  4. f.close()
  5. a=int(input('请输入α值:'))
  6. g1=lambda a:a*10
  7. g2=lambda a,d:a*(10+d)
  8. g3=lambda a:a*20
  9. num=[i+1 for i in range(len(di))]
  10. p=[g1(a) for d in di]
  11. pp=[g2(a,d) for d in di]
  12. q=[g3(a) for d in di]
  13. print('序号','di','pi','p\'i','qi',sep='\t')
  14. for each in zip(num,di,p,pp,q):
  15.     print(*each,sep='\t')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 13:13:30 | 显示全部楼层

#-*- 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[t]:
        if topo[node][t] > 0 and dis[node] == 0:
            dis[node] = dis[t] + 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[node] + 1 and pre[node] == 0:
            if remain > cap: remain = cap
            pre[node] = s
            rst = get_augment_path(node, t, dis, pre, remain)
            if rst != 999:
                topo[node] = topo[node] - rst
                topo[node] = topo[node] + rst
                print(s ,'->',node )
                print(topo[node])
                return rst
            else: # 回溯
                rst = get_augment_path(node, t, dis, pre, remain)
                if rst != 999:
                    topo[node] = topo[node] - rst
                    topo[node] = topo[node] + rst

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

    return 999

def sap(s, t):
    dis = [0 for i in range(len(topo) + 1)]
    init_dis(1, 4, dis)
    flow = 0

    while dis < len(topo):
        pre = [0 for i in range(len(topo) + 1)]
        rst = get_augment_path(1, 4, dis, pre, 999)
        if rst != 999: flow = flow + rst

    print (flow)

if __name__ == '__main__':
    sap(1, 4)
   
这是最大流sap 算法代码,这个程序的输入只是一个例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 13:18:08 | 显示全部楼层
  1. #-*- coding: utf-8 -*-

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

  6. def init_dis(s, t, dis):
  7.     if s == t: return
  8.     for node in topo[t]:
  9.         if topo[node][t] > 0 and dis[node] == 0:
  10.             dis[node] = dis[t] + 1
  11.             init_dis(s, node, dis)

  12. def get_augment_path(s, t, dis, pre, remain):
  13.     if s == t: return remain
  14.     for node, cap in topo[s].items():
  15.         if cap > 0 and dis[s] == dis[node] + 1 and pre[node] == 0:
  16.             if remain > cap: remain = cap
  17.             pre[node] = s
  18.             rst = get_augment_path(node, t, dis, pre, remain)
  19.             if rst != 999:
  20.                 topo[s][node] = topo[s][node] - rst
  21.                 topo[node][s] = topo[node][s] + rst
  22.                 print(s ,'->',node )
  23.                 print(topo[s][node])
  24.                 return rst
  25.             else: # 回溯
  26.                 rst = get_augment_path(node, t, dis, pre, remain)
  27.                 if rst != 999:
  28.                     topo[s][node] = topo[s][node] - rst
  29.                     topo[node][s] = topo[node][s] + rst

  30.                     return rst
  31.     else: # 没有允许弧,更新d
  32.         min_d = 999
  33.         for node in topo[s]:
  34.             if dis[node] + 1 < min_d and topo[s][node] > 0: min_d = dis[node] + 1
  35.         dis[s] = min_d

  36.     return 999

  37. def sap(s, t):
  38.     dis = [0 for i in range(len(topo) + 1)]
  39.     init_dis(1, 4, dis)
  40.     flow = 0

  41.     while dis[s] < len(topo):
  42.         pre = [0 for i in range(len(topo) + 1)]
  43.         rst = get_augment_path(1, 4, dis, pre, 999)
  44.         if rst != 999: flow = flow + rst

  45.     print (flow)

  46. if __name__ == '__main__':
  47.     sap(1, 4)
  48.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-10 13:22:39 | 显示全部楼层
  1. topo = { 1 : {2 : 16, 3 : 13, 4 : 13, 5 : 5 , 6 : 2},
  2.          2 : {1 : 0, 5 : 10, 9 : 10 },
  3.          3 : {1 : 0, 2 : 0, 4 : 10, 7 : 10},
  4.          4 : {1 : 0, 3 : 0 , 6 : 10 , 10 : 10},
  5.          5 : {1 : 0, 2 : 0 , 3 : 10 , 8 : 10},
  6.          6 : {1 : 0 , 4 : 0 , 7 : 10 , 10 : 10},
  7.          7 : {3 : 0 , 6 : 0 , 8 : 10 , 10 : 10},
  8.          8 : {5 : 0 , 7 : 0 , 9 : 10 , 10 : 10},
  9.          9 : {2 : 0 , 8 : 0 , 10 : 10},
  10.          10 : {6 : 0 , 7 : 0 , 8 : 0 , 9 : 0} }

  11. def init_dis(s, t, dis):
  12.     if s == t: return
  13.     for node in topo[t]:
  14.         if topo[node][t] > 0 and dis[node] == 0:
  15.             dis[node] = dis[t] + 1
  16.             init_dis(s, node, dis)

  17. def get_augment_path(s, t, dis, pre, remain):
  18.     if s == t: return remain
  19.     for node, cap in topo[s].items():
  20.         if cap > 0 and dis[s] == dis[node] + 1 and pre[node] == 0:
  21.             if remain > cap: remain = cap
  22.             pre[node] = s
  23.             rst = get_augment_path(node, t, dis, pre, remain)
  24.             if rst != 999:
  25.                 topo[s][node] = topo[s][node] - rst
  26.                 topo[node][s] = topo[node][s] + rst
  27.                 print(s ,'->',node )
  28.                 print(topo[s][node])
  29.                 return rst
  30.             else: # 回溯
  31.                 rst = get_augment_path(node, t, dis, pre, remain)
  32.                 if rst != 999:
  33.                     topo[s][node] = topo[s][node] - rst
  34.                     topo[node][s] = topo[node][s] + rst
  35.                     return rst
  36.     else: # 没有允许弧,更新d
  37.         min_d = 999
  38.         for node in topo[s]:
  39.             if dis[node] + 1 < min_d and topo[s][node] > 0: min_d = dis[node] + 1
  40.         dis[s] = min_d

  41.     return 999

  42. def sap(s, t):
  43.     dis = [0 for i in range(len(topo) + 1)]
  44.     init_dis(1, 10, dis)
  45.     flow = 0

  46.     while dis[s] < len(topo):
  47.         pre = [0 for i in range(len(topo) + 1)]
  48.         rst = get_augment_path(1, 10, dis, pre, 999)
  49.         if rst != 999: flow = flow + rst

  50.     print (flow)

  51. if __name__ == '__main__':
  52.     sap(1, 10)
  53.   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-10 15:40:55 | 显示全部楼层
  1. topo = { 1 : {2 : 16, 3 : 13, 4 : 13, 5 : 5 , 6 : 2},
  2.          2 : {1 : 0, 3 : 10,5 : 10, 9 : 10 },
  3.          3 : {1 : 0, 2 : 0, 4 : 10, 5: 0 , 7 : 10},
  4.          4 : {1 : 0, 3 : 0 , 6 : 10 , 10 : 10},
  5.          5 : {1 : 0, 2 : 0 , 3 : 10 , 8 : 10},
  6.          6 : {1 : 0 , 4 : 0 , 7 : 10 , 10 : 10},
  7.          7 : {3 : 0 , 6 : 0 , 8 : 10 , 10 : 10},
  8.          8 : {5 : 0 , 7 : 0 , 9 : 10 , 10 : 10},
  9.          9 : {2 : 0 , 8 : 0 , 10 : 10},
  10.          10 : {4: 0 , 6 : 0 , 7 : 0 , 8 : 0 , 9 : 0} }

  11. def init_dis(s, t, dis):
  12.     if s == t: return
  13.     for node in topo[t]:
  14.         print(node,t)
  15.         if topo[node][t] > 0 and dis[node] == 0:
  16.             dis[node] = dis[t] + 1
  17.             init_dis(s, node, dis)

  18. def get_augment_path(s, t, dis, pre, remain):
  19.     if s == t: return remain
  20.     for node, cap in topo[s].items():
  21.         if cap > 0 and dis[s] == dis[node] + 1 and pre[node] == 0:
  22.             if remain > cap: remain = cap
  23.             pre[node] = s
  24.             rst = get_augment_path(node, t, dis, pre, remain)
  25.             if rst != 999:
  26.                 topo[s][node] = topo[s][node] - rst
  27.                 topo[node][s] = topo[node][s] + rst
  28.                 print(s ,'->',node )
  29.                 print(topo[s][node])
  30.                 return rst
  31.             else: # 回溯
  32.                 rst = get_augment_path(node, t, dis, pre, remain)
  33.                 if rst != 999:
  34.                     topo[s][node] = topo[s][node] - rst
  35.                     topo[node][s] = topo[node][s] + rst
  36.                     return rst
  37.     else: # 没有允许弧,更新d
  38.         min_d = 999
  39.         for node in topo[s]:
  40.             if dis[node] + 1 < min_d and topo[s][node] > 0: min_d = dis[node] + 1
  41.         dis[s] = min_d

  42.     return 999

  43. def sap(s, t):
  44.     dis = [0 for i in range(len(topo) + 1)]
  45.     init_dis(1, 10, dis)
  46.     flow = 0

  47.     while dis[s] < len(topo):
  48.         pre = [0 for i in range(len(topo) + 1)]
  49.         rst = get_augment_path(1, 10, dis, pre, 999)
  50.         if rst != 999: flow = flow + rst

  51.     print (flow)

  52. if __name__ == '__main__':
  53.     sap(1, 10)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表