diff --git a/ov9/program1.py b/ov9/program1.py index 0ac072db6461a645b67bc2de2f9fafd161b52408..280a398d87a65663d3712a450704a30d71c16597 100644 --- a/ov9/program1.py +++ b/ov9/program1.py @@ -1,4 +1,3 @@ -from math import inf import sys class int_points (object): @@ -85,8 +84,6 @@ def rec_func(node, counter, global_fra): return rec_func(node, counter, global_fra) def calculate_shortest_path(current_node, time, current_neighbour, slutt): - print('\nin calculate') - res_a = [c for c in res_arr if c.node == current_neighbour.node][0] count_a = 0 count_a = rec_func(current_neighbour, count_a, slutt) count_b = 0 @@ -105,10 +102,14 @@ def update_que(que): que = [a.node for a in tmp_arr if a in tmp_arr] return que - +end_que = [] queue = [] +we_soon_to_be_done = False def dijkstras(slutt, fra, start): + global we_soon_to_be_done global queue + if we_soon_to_be_done: + end_que.pop(0) current_node = [b for b in res_arr if b.node == fra][0] for tmp_edge in edge_arr: if tmp_edge.fra == fra: @@ -118,17 +119,19 @@ def dijkstras(slutt, fra, start): current_neighbour.prev = fra if tmp_edge.til == slutt: current_node.visited = True - queue.pop(0) - dijkstras(slutt, slutt, start) + we_soon_to_be_done = True + end_que.append(tmp_edge.til) else: - queue.append(tmp_edge.til) + if tmp_edge.fra == slutt: + end_que.append(tmp_edge.til) + else: + queue.append(tmp_edge.til) elif current_neighbour.node != start: if calculate_shortest_path(current_node, tmp_edge.time, current_neighbour, start): current_neighbour.time = tmp_edge.time current_neighbour.prev = tmp_edge.fra - - if fra == slutt: + if we_soon_to_be_done and not len(end_que): #not finished print('ferdig, resultater er: node, tid, prev, besøkt') for i in res_arr: @@ -137,10 +140,14 @@ def dijkstras(slutt, fra, start): print('que when done is: ', queue) exit() else: - queue.pop(0) - current_node.visited = True - queue = update_que(queue) - dijkstras(slutt,queue[0],start) + if we_soon_to_be_done: + current_node.visited = True + dijkstras(slutt,end_que[0],start) + else: + queue.pop(0) + current_node.visited = True + queue = update_que(queue) + dijkstras(slutt,queue[0],start) @@ -149,8 +156,8 @@ def init_things(): if len(sys.argv) > 1: if sys.argv[1] == '-d': #node_id - start = 0 - slutt = 2 + start = 20 + slutt = 27 init_table() queue.append(start) start_node = [a for a in res_arr if a.node == start][0]