【发布时间】:2020-07-07 15:57:06
【问题描述】:
我想计算给定模型铁路上的可用路线。
假设:
- 所有列车仅在称为火车站的定义点开始和停止。
- 火车在旅途中不会发生碰撞。无需担心。
- 我们不必考虑火车的长度。我们假设它是一个占用原子空间的机车。
- 在一个火车站只有一列火车可以停靠。
- 一列火车可以在同一个火车站启停。
所有列车的起始位置和结束位置都存储在地图中。所有排列都存储在一个列表中。示例:
iex(1)> Trains.list_routes(["ICE"], ["Hamburg", "Frankfurt"])
[
%{end: %{"ICE" => "Hamburg"}, start: %{"ICE" => "Hamburg"}},
%{end: %{"ICE" => "Frankfurt"}, start: %{"ICE" => "Frankfurt"}},
%{end: %{"ICE" => "Frankfurt"}, start: %{"ICE" => "Hamburg"}},
%{end: %{"ICE" => "Hamburg"}, start: %{"ICE" => "Frankfurt"}}
]
模型铁路可能是这样的(红色数字表示火车站):
对于该模型铁路上的两列火车,该函数将被这样调用:
Trains.list_routes([:red_train, :blue_train], ["1", "2", "3", "4", "5"])
这是我当前的代码:
defmodule Trains do
@moduledoc """
Documentation for `Trains`.
"""
@doc """
Returns a list of all possible routes.
## Examples
iex> Trains.list_routes([:red_train, :blue_train], ["Station 1", "Station 2"])
[
%{
end: %{blue_train: "Station 2", red_train: "Station 1"},
start: %{blue_train: "Station 2", red_train: "Station 1"}
},
%{
end: %{blue_train: "Station 1", red_train: "Station 2"},
start: %{blue_train: "Station 1", red_train: "Station 2"}
},
%{
end: %{blue_train: "Station 1", red_train: "Station 2"},
start: %{blue_train: "Station 2", red_train: "Station 1"}
},
%{
end: %{blue_train: "Station 2", red_train: "Station 1"},
start: %{blue_train: "Station 1", red_train: "Station 2"}
}
]
"""
def list_routes([], []) do
[]
end
def list_routes([train], [station]) do
[
%{start: %{train => station}, end: %{train => station}}
]
end
def list_routes([train], [station1, station2]) do
[
%{start: %{train => station1}, end: %{train => station1}},
%{start: %{train => station2}, end: %{train => station2}},
%{start: %{train => station1}, end: %{train => station2}},
%{start: %{train => station2}, end: %{train => station1}}
]
end
def list_routes([train1, train2], [station1, station2]) do
[
%{
start: %{train1 => station1, train2 => station2},
end: %{train1 => station1, train2 => station2}
},
%{
start: %{train1 => station2, train2 => station1},
end: %{train1 => station2, train2 => station1}
},
%{
start: %{train1 => station1, train2 => station2},
end: %{train1 => station2, train2 => station1}
},
%{
start: %{train1 => station2, train2 => station1},
end: %{train1 => station1, train2 => station2}
}
]
end
def list_routes(trains, train_stations) do
# ???
end
end
当trains的数量和train_stations的数量大于1时,如何循环使用list_routes(trains, train_stations)的所有组合?
【问题讨论】:
标签: elixir