PriorityQueueという名前のクラスを使用しています。名前のように、要素を比較してそれらを指定する必要があります。これは、優先度キュー内のComparerクラスです。
private class DefaultComparer : IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
#region Require
if(!(y is IComparable))
{
throw new ArgumentException(
"Item does not implement IComparable.");
}
#endregion
IComparable a = x as IComparable;
Debug.Assert(a != null);
return a.CompareTo(y);
}
#endregion
}
そして、これは私が比較しているものです
class Coordenada : IComparable
{
public int x;
public int y;
public float heuristico;
int IComparable.CompareTo(object coord1)
{
Coordenada c1 = (Coordenada)coord1;
//Coordenada c2 = (Coordenada)coord2;
if(c1.heuristico < heuristico)
return 1;
if(c1.heuristico > heuristico)
return -1;
return 0;
}
}
タイトルで言ったエラーは次のとおりです:ソースタイプから宛先タイプにキャストできませんCoordenadaとオブジェクトが同じではないことを認識しているため、キャストを試しましたが、どうすればよいかわかりませんか?
編集:これは、Coordenada内でCompareTo関数を使用することが想定されている優先キューを使用する方法です
Coordenada c;
PriorityQueue cola = new PriorityQueue();
c.x = ax;
c.y = ay;
c.heuristico = distancia;
cola.Enqueue(c)
priorityQueue はリストです。しばらくの間、そのリストに 2 ~ 3 個の異なる Coordenada オブジェクトを追加します。これは、各サイクルで最小の番号を検索し、必要な場所に到達するまでリストから削除するためです。