ツリートラバーサルのアルゴリズムを考え出そうとしていますが、行き詰まっています。
これは(私が尋ねた他の人と比較して)かなり難しい質問なので、私は自分で考え続ける必要があるかもしれません。しかし、私はそれをここに捨てると思いました。
私は次のクラス構造を持っています:
public class Transition
{
// The state we are moving from.
public String From { get; set; }
// All the To states for this from
public List<String>To { get; set; }
}
List<Transition> currentTransistions;
currentTransistionsが完全に入力されると、次のようになります(私にとって):
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfTransition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Transition>
<From />
<To>
<string>Not Done</string>
</To>
</Transition>
<Transition>
<From>Not Done</From>
<To>
<string>In Progress</string>
<string>Deleted</string>
</To>
</Transition>
<Transition>
<From>Deleted</From>
<To>
<string>Not Done</string>
</To>
</Transition>
<Transition>
<From>In Progress</From>
<To>
<string>Done</string>
<string>Ready For Test</string>
<string>Deleted</string>
</To>
</Transition>
<Transition>
<From>Done</From>
<To>
<string>In Progress</string>
</To>
</Transition>
<Transition>
<From>Ready For Test</From>
<To>
<string>In Progress</string>
<string>Done</string>
<string>Deleted</string>
</To>
</Transition>
</ArrayOfTransition>
ここでの考え方は、TFS作業項目の状態遷移をマッピングしたということです。私が今必要としているのは、「現在の状態を考えれば、どうすれば別の状態に到達できるか」という言い方です。
理想的には、次のようになります。
foreach (string state in GetToFinalState(finalState, currentState, currentTransistions)
{
// Save the workitem at the state so we can get to the final state.
}
GetToFinalStateは、最短パスを計算し、C#のyield機能を使用して、foreachステートメントに対して一度に1つずつ提供する方法を用意する必要があります。
私は以前にyield1を使用したことがあるので、それを理解できると思います。しかし、最短経路を見つけると同時に(関数で毎回再計算せずに)それを行う方法がわかりませんか?
これまで読んだことがあるなら、ありがとう。あなたが答えを提供するならば、それから二重の感謝。