#优化 #18xx #图形

n18route

搜索18xx地图中最佳的路线组合

1个不稳定版本

0.1.0 2021年10月8日

#2545算法

每月 36 次下载
7crate中使用(其中6个直接使用)

MIT/Apache

465KB
9K SLoC

概述

本模块解决了寻找一组路线的问题,这些路线可以使一家公司获得最高的收入。

例如,以下函数可以在地图上找到特定公司(在此处通过它们的 Token 识别)的最佳路线,假设(游戏特定的)关于哪些元素可以被单个路线重用(conflict_rule)以及哪些元素可以被多个路线共享(route_conflict_rule)的规则

use n18route::{paths_for_token, Bonus, Criteria, ConflictRule, Trains, Routes};
use n18map::Map;
use n18token::Token;

fn find_best_routes(map: &Map, token: Token, trains: Trains,
                    bonuses: Vec<Bonus>) -> Routes {
    // Find all of the paths that the trains could operate.
    let criteria = Criteria {
        token,
        path_limit: trains.path_limit(),
        // NOTE: game-specific rule.
        conflict_rule: ConflictRule::TrackOrCityHex,
        // NOTE: game-specific rule.
        route_conflict_rule: ConflictRule::TrackOnly,
    };
    let paths = paths_for_token(&map, &criteria);

    // Return the best routes out of the available paths.
    trains
        .select_routes(paths, bonuses)
        .expect("Could not find an optimal set of routes")
}

有关详细信息,请参阅路线查找文档

依赖项

~10MB
~208K SLoC