public void BestPath(Intarray v1, Intarray v2, Intarray inputs,
Intarray outputs, Floatarray costs)
{
stree.Clear();
beam.Resize(1);
beamcost.Resize(1);
beam[0] = stree.Add(-1, fst1.GetStart(), fst2.GetStart(), 0, 0, 0);
beamcost[0] = 0;
best_so_far = 0;
best_cost_so_far = fst1.GetAcceptCost(fst1.GetStart()) +
fst2.GetAcceptCost(fst1.GetStart());
while (beam.Length() > 0)
Radiate();
stree.Get(v1, v2, inputs, outputs, costs, best_so_far);
costs.Push(fst1.GetAcceptCost(stree.v1[best_so_far]) +
fst2.GetAcceptCost(stree.v2[best_so_far]));
//logger("costs", costs);
}