diff --git a/src/dijkstragraph.c b/src/dijkstragraph.c index e0748f5..e1ad2c0 100644 --- a/src/dijkstragraph.c +++ b/src/dijkstragraph.c @@ -180,10 +180,7 @@ dijkstra_cost dijkstra_get_weight_from_distance(struct dijkstra_node *node_a, switch (net_type) { case TRAINLINE: - scale = 5.0; - break; - case ACCESS: - scale = 0.5; + scale = 10.0; break; default: scale = 1.0; diff --git a/src/dijkstrasearch.c b/src/dijkstrasearch.c index 322e8b9..1e74ef3 100644 --- a/src/dijkstrasearch.c +++ b/src/dijkstrasearch.c @@ -112,6 +112,11 @@ struct dijkstra_node *dijkstra_search_process_queue(struct dijkstra_search *sear for (l = node->paths; l != NULL; l = l->next) { path = (struct dijkstra_path*) l->data; cost = state->cost + path->weight; + if (state->cheapest_path && path->net_meta->type == ACCESS) { // If we just jumped onto an access path + if (state->cheapest_path->net_meta->type != ACCESS) {// and we came from a non-access path (getting on or off) + cost += (DIJKSTRA_ACCESS_PENALTY * 100.0); // add a penalty + } + } connection = dijkstra_node_get_connection(node, path); diff --git a/src/dijkstrasearch.h b/src/dijkstrasearch.h index 576f7f5..30beb3c 100644 --- a/src/dijkstrasearch.h +++ b/src/dijkstrasearch.h @@ -5,6 +5,8 @@ #define DIJKSTRA_SEARCH_MAX_ITERATIONS 5000 +#define DIJKSTRA_ACCESS_PENALTY 300.0 + struct dijkstra_state { struct dijkstra_path *cheapest_path; dijkstra_cost cost;