1
2 '''
3 Created on Aug 12, 2010
4
5 @author: dwmclary
6 '''
7 import sys
8
10 - def __init__(self, nID=None, distance=None, adj=None, path = None):
11 if nID != None:
12 self.nID = nID
13 self.distance = distance
14 self.adj = adj
15 self.path = path
16
18 s = str(self.nID)+ " "+ " ".join(map(str,self.adj)) +\
19 " d: "+str(self.distance) + " path: " + " ".join(map(str,self.path))
20 return s
21
24
26 for line in file:
27 line = line.rstrip().split()
28 nid = line[0]
29
30 if not "pathlen:" in line:
31 type = "node"
32 d_index = line.index("d:")+1
33 distance = float(line[d_index])
34 p_index = line.index("path:")
35 if p_index > len(line)-1:
36 path = line[p_index,:]
37 else:
38 path = []
39 adj = line[1:d_index-1]
40 node = BFSNode(nid, distance, adj, path)
41 yield type, nid, node
42 else:
43 type = "distance"
44 d_index = line.index("pathlen:")
45 distance = line[d_index+1]
46 p_index = line.index("path:")
47 path = line[p_index+1:]
48 yield type, nid, (distance, path)
49
50
51
53 p_min = {}
54 d_min = {}
55 M = {}
56 data = read_map_output(sys.stdin)
57 inf_count = 0
58 for type, key, value in data:
59 if type == "distance":
60 if key in d_min:
61 if d_min[key] > value[0]:
62 d_min[key] = value[0]
63 p_min[key] = value[1]
64
65 else:
66 d_min[key] = value[0]
67 p_min[key] = value[1]
68 elif type == "node":
69 M[key] = value
70 for key in M.keys():
71 if key in d_min:
72 M[key].distance = d_min[key]
73 M[key].path = p_min[key]
74
75 if M[key].distance == 'inf':
76 M[key].path = ""
77 inf_count +=1
78 print M[key]
79 print "#inf_count: "+str(inf_count)
80
81
82
83 if __name__ == "__main__":
84 try:
85 import psyco
86 psyco.full()
87 except ImportError:
88 pass
89 main()
90