Ejemplo n.º 1
0
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);
      }
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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()	      */