from operator import itemgetter
import collections
tmp = [(0, 30), (0, 20), (10, 40), (30, 50), (50, 90), (70, 100), ]
aa = sorted(tmp, key=itemgetter(1)) # sort with respect to 1st elem
a = set(aa)
space = 100
d_conn = 15
RTT = d_conn*2
bandwidth = 10
def get_marginal_cost(fragment):
return RTT + (fragment[1] - fragment[0])/bandwidth
def dfs(a, start, path=None):
if path is None:
path = [start, ]
if start[1] == space:
yield path
for frgmt in a - set(path):
l = frgmt[0]
r = frgmt[1]
# if start[0] < l <= start[1] <= r:
if l <= start[1] <= r:
yield dfs(a, frgmt, path + [frgmt, ])
for output in list(dfs(a, (0, 0))):
for outpu in list(output):
for outp in list(outpu):
for out in list(outp):
for ou in list(out):
for o in list(ou):
print o
ZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgppbXBvcnQgY29sbGVjdGlvbnMKCnRtcCA9IFsoMCwgMzApLCAoMCwgMjApLCAoMTAsIDQwKSwgKDMwLCA1MCksICg1MCwgOTApLCAoNzAsIDEwMCksIF0KYWEgPSBzb3J0ZWQodG1wLCBrZXk9aXRlbWdldHRlcigxKSkgIyBzb3J0IHdpdGggcmVzcGVjdCB0byAxc3QgZWxlbQphID0gc2V0KGFhKQpzcGFjZSA9IDEwMApkX2Nvbm4gPSAxNQpSVFQgPSBkX2Nvbm4qMgpiYW5kd2lkdGggPSAxMAoKZGVmIGdldF9tYXJnaW5hbF9jb3N0KGZyYWdtZW50KToKICAgIHJldHVybiBSVFQgKyAoZnJhZ21lbnRbMV0gLSBmcmFnbWVudFswXSkvYmFuZHdpZHRoCgpkZWYgZGZzKGEsIHN0YXJ0LCBwYXRoPU5vbmUpOgogICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgIHBhdGggPSBbc3RhcnQsIF0KICAgIGlmIHN0YXJ0WzFdID09IHNwYWNlOgogICAgICAgIHlpZWxkIHBhdGgKICAgIGZvciBmcmdtdCBpbiBhIC0gc2V0KHBhdGgpOgogICAgICAgIGwgPSBmcmdtdFswXQogICAgICAgIHIgPSBmcmdtdFsxXQojICAgICAgICBpZiBzdGFydFswXSA8IGwgPD0gc3RhcnRbMV0gPD0gcjoKICAgICAgICBpZiBsIDw9IHN0YXJ0WzFdIDw9IHI6CiAgICAgICAgICAgIHlpZWxkIGRmcyhhLCBmcmdtdCwgcGF0aCArIFtmcmdtdCwgXSkKCmZvciBvdXRwdXQgaW4gbGlzdChkZnMoYSwgKDAsIDApKSk6CiAgICBmb3Igb3V0cHUgaW4gbGlzdChvdXRwdXQpOgogICAgICAgIGZvciBvdXRwIGluIGxpc3Qob3V0cHUpOgogICAgICAgICAgICBmb3Igb3V0IGluIGxpc3Qob3V0cCk6CiAgICAgICAgICAgICAgICBmb3Igb3UgaW4gbGlzdChvdXQpOgogICAgICAgICAgICAgICAgICAgIGZvciBvIGluIGxpc3Qob3UpOgogICAgICAgICAgICAgICAgICAgICAgICBwcmludCBvCg==
[(0, 0), (0, 20), (10, 40), (30, 50), (50, 90), (70, 100)]
<generator object dfs at 0xb76258ec>
[(0, 0), (0, 20), (0, 30), (30, 50), (50, 90), (70, 100)]
[(0, 0), (0, 30), (10, 40), (30, 50), (50, 90), (70, 100)]
(0, 0)
(0, 30)
(30, 50)
(50, 90)
(70, 100)