Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fin = open("input.txt")
- lines = []
- for line in fin:
- lines.append(line)
- n = len(lines) - 1
- print(n)
- d = []
- smejnost = []
- v = []
- vstar = []
- p = []
- inf = 1e9
- for i in range(n):
- d.append([])
- p.append([])
- smejnost.append([])
- v.append(0)
- vstar.append([])
- for j in range(n):
- smejnost[i].append(0)
- d[i].append(inf)
- p[i].append(0)
- vstar[i].append(0)
- for i in range(n):
- s = lines[i]
- a, s = s.split('=')
- ss = s.split(')')
- a = int(a)
- a -= 1
- for c in range(len(ss) - 1):
- sss = ss[c].split('(')
- b, cost = sss[1].split(',')
- b = int(b)
- cost = int(cost)
- b -= 1
- d[a][b] = cost
- smejnost[a][b] = cost
- fin.close()
- mxlen = 0
- for i in range(n):
- for j in range(n):
- mxlen = max(mxlen, smejnost[i][j])
- mxlen *= n
- for i in range(n):
- for j in range(n):
- if smejnost[i][j] == -1:
- smejnost[i][j] = mxlen
- d[i][j] = smejnost[i][j]
- s = lines[n]
- s = s[1:len(s) - 1].split(',')
- for c in s:
- a, b = c.split(':')
- a = int(a)
- b = int(b)
- v[a - 1] = b
- for i in range(n):
- d[i][i] = 0
- for k in range(n):
- for i in range(n):
- for j in range(n):
- if d[i][k] < inf and d[k][j] < inf:
- d[i][j] = min(d[i][j], d[i][k] + d[k][j])
- CBB = []
- for i in range(n):
- CBB.append(0)
- for j in range(n):
- CBB[i] += d[i][j]
- mediana = 0
- for i in range(n):
- if CBB[mediana] > CBB[i]:
- mediana = i
- MBB = []
- for i in range(n):
- MBB.append(d[i][0])
- for j in range(n):
- MBB[i] = max(MBB[i], d[i][j])
- center = 0
- for i in range(n):
- if MBB[center] > MBB[i]:
- center = i
- print("Smejnost")
- for i in range(n):
- s = ""
- for j in range(n):
- s += str(smejnost[i][j]) + ' '
- print(s)
- print("D")
- for i in range(n):
- s = ""
- for j in range(n):
- s += str(d[i][j]) + ' '
- print(s)
- print("center " + str(center + 1))
- print("mediana " + str(mediana + 1))
- print("Находим все P")
- P = inf
- for i in range(n):
- for j in range(i + 1, n):
- if smejnost[i][j] > 0:
- # print(i+1,j+1,end=': ')
- for k in range(n):
- if k == i or k == j:
- continue
- if v[k] * min(d[k][i], d[k][j]) > p[i][j]:
- vstar[i][j] = k
- p[i][j] = v[k] * min(d[k][i], d[k][j])
- # print(v[k]*min(d[k][i],d[k][j]),end=', ')
- print("Rebro ({},{})".format(i + 1, j + 1))
- print(p[i][j])
- P = min(P, p[i][j])
- print("Находим все H")
- H = inf
- for i in range(n):
- for j in range(i + 1, n):
- if smejnost[i][j] > 0:
- H = min(H, p[i][j] + v[vstar[i][j]] * smejnost[i][j] / 2)
- print("Rebro ({},{})".format(i + 1, j + 1))
- print(min(H, p[i][j] + v[vstar[i][j]] * smejnost[i][j] / 2))
- print("P =", P)
- print("H =", H)
- print("rebra kotorie ostalis")
- for i in range(n):
- for j in range(n):
- #if H >= smejnost[i][j] >= P:
- if H >= p[i][j] >= P and smejnost[i][j]!=mxlen:
- print(i + 1, j + 1)
- else:
- smejnost[i][j] = 0
- for i in range(n):
- for j in range(n):
- d[i][j] *= v[j]
- print("D")
- for i in range(n):
- s = ""
- for j in range(n):
- s += str(d[i][j]) + ' '
- print(s)
- ok = False
- minf = 0
- minv1 = 0
- minv2 = 0
- fepsilon = 0
- for i in range(n):
- for j in range(n):
- if smejnost[i][j] > 0:
- print("Rebro ({},{})".format(i+1, j+1))
- print("Ksi")
- e = [] # 1 etap
- for k in range(n):
- brv = d[j][k]
- alv = d[i][k]
- vv = v[k]
- # print("brv = {} alv = {} vv = {} toapp = {}".format(brv,alv,vv,(brv-alv)/(2*vv)))
- # e.append((brv - alv) / (2 * vv))
- e.append((alv+d[i][j]-brv) / 2 )
- print(e)
- print("eps")
- eps = [] # 2 этап
- for v1 in range(n):
- eps.append([])
- for v2 in range(n):
- # print("Look for {},{}".format(v1, v2))
- bv1 = d[j][v1]
- av2 = d[i][v2]
- vv1 = v[v1]
- vv2 = v[v2]
- #print("Нахождение eps")
- #print("bv1 = {} av2 = {} vv1 = {} vv2 = {} L = {} ".format(bv1,av2,vv1,vv2,d[i][j]))
- #eps[v1].append((bv1 - av2) / (vv1 + vv2))
- eps[v1].append((vv2*(av2+d[i][j])-bv1*vv1) / (vv1+vv2))
- print(eps[v1])
- print("f")
- f = [] # 3 этап
- found = False
- mnv1 = 0
- mnv2 = 0
- mnf = 0
- for v1 in range(n):
- f.append([])
- for v2 in range(n):
- bv1 = d[j][v1]
- vv1 = v[v1]
- #f[v1].append(bv1 - vv1 * eps[v1][v2])
- # if i == 0 and j == 2 and v1 == 1 and v2 == 3:
- # print("CHECK ",f[v1][v2])
- #if e[v1] <= eps[v1][v2] <= smejnost[i][j] and 0 < eps[v1][v2] < e[v2]:
- f[v1].append((bv1 + eps[v1][v2])*vv1)
- #print("L={}".format(smejnost[i][j]))
- #print("e[v1] = {} e[v2] = {}".format(e[v1], e[v2]))
- #print("eps[v1][v2]={}".format(eps[v1][v2]))
- if e[v2] <= eps[v1][v2] <= smejnost[i][j] and 0 <= eps[v1][v2] <= e[v1]:
- #print("Подходит")
- if not found:
- found = True
- mnf = f[v1][v2]
- mnv1 = v1
- mnv2 = v2
- else:
- if f[v1][v2] < mnf:
- mnf = f[v1][v2]
- mnv1 = v1
- mnv2 = v2
- #else:
- #print("Не подходит")
- #print("f")
- print(f[v1])
- #print(" ")
- print("f* = {} eps = {}".format(mnf, eps[mnv1][mnv2]))
- fl = 0 # 4 ETAP
- fr = 0
- for v1 in range(n):
- fl = max(fl, d[v1][i])
- fr = max(fr, d[v1][j])
- print("fl = {} fr = {}".format(fl, fr))
- epsilon = 0
- a = sorted([fl, fr, mnf])
- if a[0] == fr:
- epsilon = fr
- elif a[0] == mnf:
- epsilon = eps[mnv1][mnv2]
- if not ok: # 5 etap
- ok = True
- fepsilon = epsilon
- minf = mnf
- else:
- if mnf < minf:
- minf = mnf
- minv1 = i
- minv2 = j
- fepsilon = epsilon
- print("f = {} eps = {}".format(minf, epsilon))
- print("min f = {}, epsilon = {}, ({},{})".format(minf, fepsilon, minv1 + 1, minv2 + 1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement