private void achieve(int flag) { if (!(flag == SORTED_BY_INPUT || flag == SORTED_BY_OUTPUT || flag == HAS_HEURISTICS)) { throw new Exception("CHECK_ARG: flag == SORTED_BY_INPUT || flag == SORTED_BY_OUTPUT || flag == HAS_HEURISTICS"); } if (flags > 0 & flag > 0) { return; } if (flag == HAS_HEURISTICS) { AStarUtil.a_star_backwards(m_heuristics, this); return; } for (int node = 0; node < nStates(); node++) { Intarray permutation = new Intarray(); if (flag == OcroFST.SORTED_BY_INPUT) { NarrayUtil.Quicksort(permutation, m_inputs[node]); } else { NarrayUtil.Quicksort(permutation, m_outputs[node]); } NarrayUtil.Permute(m_inputs[node], permutation); NarrayUtil.Permute(m_outputs[node], permutation); NarrayUtil.Permute(m_targets[node], permutation); NarrayUtil.Permute(m_costs[node], permutation); } flags |= flag; }
public override double BestPath(out string result) { return(AStarUtil.a_star(out result, this)); }