Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sys import stdin, stderr
- def beste_sti(nm, sans, lengde):
- #initialisering
- d = [0.0]*lengde;
- pi = [-1]*lengde;
- pi[0] = 0;
- Q = [1]*lengde;
- for i in range(0, lengde):
- d[i] = 0;
- d[0] = sans[0];
- while 1:
- # sjekker om det er flere som ikke er tatt med
- a = 0;
- for i in Q:
- if i == 1:
- a = 1;
- if a == 0:
- break;
- # henter ut den med hoyest d-sannsynlighet
- bestEst = -1;
- bestKey = -1;
- for i in range(0, lengde):
- if (d[i] > bestEst) and (Q[i] == 1):
- bestEst = d[i];
- bestKey = i;
- Q[bestKey] = 0;
- # relaxer alle stier ut ifra denne
- for i in range(0, lengde):
- if (d[i] < d[bestKey]*sans[i]) and (nm[bestKey][i] == 1):
- d[i] = d[bestKey]*sans[i];
- pi[i] = bestKey;
- #returstring...
- returnarray = [];
- returnarray.append(`lengde-1`)
- prevkey = pi[lengde-1];
- while prevkey != 0:
- if(prevkey == -1):
- return 0;
- returnarray.append(`prevkey`);
- prevkey = pi[prevkey];
- returnarray.append(`0`);
- returnarray = returnarray[::-1]
- return "-".join(returnarray);
- n = int(stdin.readline())
- sansynligheter = [float(x) for x in stdin.readline().split()]
- nabomatrise = []
- for linje in stdin:
- naborad = [0] * n
- naboer = [int(nabo) for nabo in linje.split()]
- for nabo in naboer:
- naborad[nabo] = 1
- nabomatrise.append(naborad)
- print beste_sti(nabomatrise, sansynligheter, n)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement