parent
f1868aba04
commit
561eec5afe
@ -180,10 +180,7 @@ dijkstra_cost dijkstra_get_weight_from_distance(struct dijkstra_node *node_a,
|
|||||||
|
|
||||||
switch (net_type) {
|
switch (net_type) {
|
||||||
case TRAINLINE:
|
case TRAINLINE:
|
||||||
scale = 5.0;
|
scale = 10.0;
|
||||||
break;
|
|
||||||
case ACCESS:
|
|
||||||
scale = 0.5;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
scale = 1.0;
|
scale = 1.0;
|
||||||
|
@ -112,6 +112,11 @@ struct dijkstra_node *dijkstra_search_process_queue(struct dijkstra_search *sear
|
|||||||
for (l = node->paths; l != NULL; l = l->next) {
|
for (l = node->paths; l != NULL; l = l->next) {
|
||||||
path = (struct dijkstra_path*) l->data;
|
path = (struct dijkstra_path*) l->data;
|
||||||
cost = state->cost + path->weight;
|
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);
|
connection = dijkstra_node_get_connection(node, path);
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#define DIJKSTRA_SEARCH_MAX_ITERATIONS 5000
|
#define DIJKSTRA_SEARCH_MAX_ITERATIONS 5000
|
||||||
|
|
||||||
|
#define DIJKSTRA_ACCESS_PENALTY 300.0
|
||||||
|
|
||||||
struct dijkstra_state {
|
struct dijkstra_state {
|
||||||
struct dijkstra_path *cheapest_path;
|
struct dijkstra_path *cheapest_path;
|
||||||
dijkstra_cost cost;
|
dijkstra_cost cost;
|
||||||
|
Loading…
Reference in New Issue
Block a user