def dijkstra(vertice_list, src, num_ver, maxC): parent = [] #marca todos os vertices como nao visitados for i in range(num_ver): parent.append(-1) #vertice inicial tem distancia 0. Na 1 iteracao todos os demais estao setados com 'infinidade' vertice_list[src].dist = 0 #tree = GTree((GCompareFunc)cmp_func); #g_tree_insert(tree,dv[src], dv[src]); from bucket import Bucket buck = Bucket(maxC * num_ver) buck.add( (vertice_list[src].dist, src)) #avl works with indexes or keys only a = 0 j = 0 #enquanto a arvore tiver uma altura>0 while (buck.isEmpty() == False): j += 1 print(j) #pegue a menor distancia: v_min_node = buck.remove_min() # 1.1 #print('v_min_node: ',v_min_node) v_min_key = v_min_node[1] v_min = vertice_list[v_min_key] v_min.visited = 1 #marque vertice minimo como ja visitado. Desse modo o 1.2 sera feito, pois nao sera mais contado #para cada vertice adjacente ao vertice minimo for key in v_min.adjs: # 1.3 adj_ver = vertice_list[ v_min.adjs[key].id] #pega o vertice adjacente #Se a distancia atual do vertice minimo, mais o seu peso, for menor que a distancia do vert adjacente if (adj_ver.visited == 0 and v_min.dist + v_min.weights[key] < adj_ver.dist): adj_ver.dist = v_min.dist + v_min.weights[ key] #a distancia do vertice adjacente tera esse novo valor parent[ adj_ver. id] = v_min.id # a pos que era do vertice adjacente, sera do menor v agora #print('add:',(adj_ver.dist,adj_ver.id) ) buck.add((adj_ver.dist, adj_ver.id))
class HashTable(IndexStructure): def __init__(self, **kwargs): #self.record = kwargs.get('record') self.kwargs = kwargs self.mapping = {} self.bucket_num = 1 self.bucket = Bucket(**self.kwargs) def _hash(self, record): hash_value = sum(record) % 10 return hash_value def load(self): """ Loads from the serialized output """ pass def save(self): """ Serializes and writes out """ pass def add(self, record): hv = self._hash(record) if hv not in self.mapping.keys(): self.mapping[hv] = self.bucket_num self.bucket.add(record, self.bucket_num) self.bucket_num += 1 else: bucket_num = self.mapping[hv] self.bucket.add(record, bucket_num) def __contains__(self, record): hv = self._hash(record) if hv not in self.mapping: return False else: bucket_num = self.mapping[hv] return self.bucket.check(record, bucket_num)