本文整理汇总了C#中Cube.Heuristic方法的典型用法代码示例。如果您正苦于以下问题:C# Cube.Heuristic方法的具体用法?C# Cube.Heuristic怎么用?C# Cube.Heuristic使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Cube
的用法示例。
在下文中一共展示了Cube.Heuristic方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: prepare
private static void prepare(Cube c, SortedDiceMultiList q)
{
// Dla każdej kostki
LinkedList<Dice> toHeur = new LinkedList<Dice>();
foreach (var dice in c)
{
// Dla każdej ścianki na kostce
bool hasZero = false;
for (int dir = 0; dir < 6;dir++ )
{
Face face = dice.faces[dir];
// Sprawdzamy w którą stronę kieruje się ścianka(malejąco, czy rosnąco z x)
int op = dir.Operand();
// Sprawdzamy na której osi leży kostka(0-y, 1-x, 2-z)
int ax = dir.Axis();
// Pobieramy wspórzędną kostki od interesujacej nas osi
int ind = dice[ax];
// Jeśli kostka ma zero, nie ma co więcej liczyć, zawsze można ją usunąć
if (face.startValue == 0)
{
// poprawiamy najlpeszą wartość na kostce
hasZero = true;
}
// Kostki nie da się usunąć(wymiary wykraczają poza sześcian)
else if (ind + face.startValue * op >= c[ax] || ind + face.startValue * op < 0)
{
// ustawiamy ściankę na nieaktywną, kostkę na nieaktywną.
face.InActive = false;
face.currentValue = int.MaxValue;
dice.activeFaces--;
}
// Być może obliczona wartosć jest najlepsza dla kostki
//else if(face.currentValue < dice.bestValue)
//{
// dice.bestValue = face.currentValue;
//}
}
// Jeśli nie mamy aktywnych ścianek, to nie mamy aktywnej kostki
if(dice.activeFaces == 0)
{
//dice.active = false;
c.ActiveDices --;
}
// Możemy usunąć tą kostkę, obliczmy jej heurystykę i dodajmy do kolejki.
if(hasZero)
{
//c.Heuristic(dice);
//q.Add(dice);
toHeur.AddLast(dice);
}
}
foreach (var dice in toHeur)
{
c.Heuristic(dice, 0);
q.Add(dice);
}
}