public void reconstruct_edges(Intarray inputs,
Intarray outputs,
Floatarray costs,
Intarray vertices)
{
int n = vertices.Length();
inputs.Resize(n);
outputs.Resize(n);
costs.Resize(n);
for (int i = 0; i < n - 1; i++)
{
int source = vertices[i];
int target = vertices[i + 1];
Intarray out_ins = new Intarray();
Intarray out_targets = new Intarray();
Intarray out_outs = new Intarray();
Floatarray out_costs = new Floatarray();
fst.Arcs(out_ins, out_targets, out_outs, out_costs, source);
costs[i] = 1e38f;
// find the best arc
for (int j = 0; j < out_targets.Length(); j++)
{
if (out_targets[j] != target) continue;
if (out_costs[j] < costs[i])
{
inputs[i] = out_ins[j];
outputs[i] = out_outs[j];
costs[i] = out_costs[j];
}
}
}
inputs[n - 1] = 0;
outputs[n - 1] = 0;
costs[n - 1] = fst.GetAcceptCost(vertices[n - 1]);
}