void dijkstra(graph_t *g, void *current, void *to, list_t *visited, list_t *distanceLabels) { assert(g); assert(current); assert(to); assert(visited); assert(distanceLabels); while (true) { if (!list_has(visited, g->comp, current)) { list_t *unvisited_neighs = unvisited_neighbors(g, current, visited); distance_label_t *here = get_distance_label(distanceLabels, current, g->comp); iter_t *it; for (it = iter(unvisited_neighs); !iter_done(it); iter_next(it)) { void *neigh = iter_get(it); int line = list_quickest_line(g->nodes, current, neigh, here->arrival_time); // printf("med linje:%i i dijkstra\n",line); assert(line); edge_t *edge = graph_get_edge(g,line,current,here->path_edges); assert(edge); list_t *tentativePath = list_clone(here->path); list_t *tentativeEdgePath = list_clone(here->path_edges); list_add(tentativePath, neigh); list_add(tentativeEdgePath, edge); char *bussDepart = list_next_dep_time(g->nodes,current,neigh,line,here->arrival_time); assert(bussDepart); int total_distance = graph_add_penalty(edge, here->arrival_time, bussDepart);// egen rad char *new_arrival_time = add_duration(bussDepart, network_get_dur(edge->label)); //egen rad //free(bussDepart); update_distance(distanceLabels, neigh, g->comp, here->dist + total_distance, tentativePath, tentativeEdgePath, new_arrival_time); //la till new_arrival_tim. ost-bågen borde gå in här!! } iter_free(it); list_free(unvisited_neighs); } list_add(visited, current); if (g->comp(current, to)) { return; } current = get_min_distance_node(distanceLabels, g->comp, visited); assert(current); } }
void graph_print_trip (graph_t *g, char *time,char *from, distance_label_t *dl) { printf("\nTrip start:%s\n",time); char *tmp_t = time; iter_t *it; char*tmp_fr; char*tmp_to; /*iter_t *it2; for (it2 = iter(dl->path_edges); !iter_done(it2); iter_next(it2)) { void *tmp_v = iter_get(it2); edge_t *tmp_e = tmp_v; puts(tmp_e->from); puts(tmp_e->to); } iter_free(it2); */ for (it = iter(dl->path_edges); !iter_done(it); iter_next(it)) { void *tmp_v = iter_get(it); edge_t *tmp_e = tmp_v; int line = network_get_line(tmp_e->label); // printf("\n\n\n%s\n",tmp_e->to); if(!tmp_fr) tmp_fr = from; // printf("linje:%i !%s!",line,tmp_fr); if(g->comp(tmp_fr,tmp_e->from))tmp_to = tmp_e->to; else{tmp_to = tmp_e->from;} //printf(" - !%s! - tid:%s\n",tmp_to,tmp_t); char *buss_dep = list_next_dep_time(g->nodes,tmp_fr,tmp_to,line,tmp_t); char *arr_time = add_duration(buss_dep, network_get_dur(tmp_e->label)); int durr = network_get_dur(tmp_e->label); printf("@ %s: #%i %s --(%i)--> %s\n",buss_dep ,line ,tmp_fr ,durr ,tmp_to ); tmp_fr = tmp_to; tmp_t = arr_time; assert(tmp_fr); assert(tmp_t); } puts("_____________________________________________________________"); printf("this trip took from:%s to:%s and %i minutes to complete.\n",time,dl->arrival_time,dl->dist+1); iter_free(it); }
static void add_delay_fields( GtkWidget *outer, t_ctxt *ctxt) /* * Add the fields specific to the at_msg action type which is used to * display a message to the user */ { GtkWidget *vbox; /* Delay box */ GtkWidget *delay; /* Delay controls */ t_usr_ctxt *usr; usr = ctxt->usr; vbox = add_frame(outer, "Delay before actions start"); gtk_container_set_border_width(GTK_CONTAINER(vbox), PAD); delay = add_duration(usr->cue->delay, &(usr->fld_hours), &(usr->fld_mins), &(usr->fld_msecs)); gtk_box_pack_start(GTK_BOX(vbox), delay, FALSE, FALSE, 5); } /* add_delay_fields() */