このデータ構造は、このA* チュートリアルから取得しました。
public interface IHasNeighbours<N>
{
IEnumerable<N> Neighbours { get; }
}
public class Path<TNode> : IEnumerable<TNode>
{
public TNode LastStep { get; private set; }
public Path<TNode> PreviousSteps { get; private set; }
public double TotalCost { get; private set; }
private Path(TNode lastStep, Path<TNode> previousSteps, double totalCost)
{
LastStep = lastStep;
PreviousSteps = previousSteps;
TotalCost = totalCost;
}
public Path(TNode start) : this(start, null, 0) { }
public Path<TNode> AddStep(TNode step, double stepCost)
{
return new Path<TNode>(step, this, TotalCost + stepCost);
}
public IEnumerator<TNode> GetEnumerator()
{
for (Path<TNode> p = this; p != null; p = p.PreviousSteps)
yield return p.LastStep;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
簡単なグラフを作成する方法がわかりません。
C# を使用して、次の無向グラフのようなものを追加するにはどうすればよいですか。
基本的に、ノードを接続する方法を知りたいです。私は自分のデータ構造を持っているので、すでに近隣と距離を決定できます。それをこの投稿されたデータ構造に変換して、AStar アルゴリズムで実行できるようにしたいと思います。
私はもっと次のようなものを探していました:
Path<EdgeNode> startGraphNode = new Path<EdgeNode>(tempStartNode);
startGraphNode.AddNeighbor(someOtherNode, distance);