我使用了一个名为 PriorityQueue 的类,就像名字所说的那样,它应该比较元素并指定它们这是优先队列中的比较器类
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 对象添加到该列表中,因为我会在每个周期中搜索最小的数字并将其从我的列表中删除,直到我到达我想要的位置