本文整理汇总了C#中NodeList.DichotomicInsertion方法的典型用法代码示例。如果您正苦于以下问题:C# NodeList.DichotomicInsertion方法的具体用法?C# NodeList.DichotomicInsertion怎么用?C# NodeList.DichotomicInsertion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NodeList
的用法示例。
在下文中一共展示了NodeList.DichotomicInsertion方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: possibles
public static List<Node> PossibleNode = new List<Node>(); // Les noeuds possibles (cases adjacentes de tout le chemin)
#endregion Fields
#region Methods
public static MyLinkedList<Tile> CalculatePathWithAStar(Map map, Tile startTile, Tile endTile)
{
PossibleNode.Clear();
NodeList<Node> openList = new NodeList<Node>(); // Contiens tout les noeuds candidat (qui vont être examinés)
NodeList<Node> closedList = new NodeList<Node>(); // Contiens la liste des meilleurs noeuds (le resultat du plus cours chemin)
List<Node> possibleNodes; // cases adjacentes du noeud courant
// Le noeud de départ
Node startNode = new Node(startTile, null, endTile); // FIXME : on recupère le noeud de départ
/**********************************/
/* Traitement des noeuds candidat */
/**********************************/
openList.Add(startNode);
while (openList.Count > 0) // Tant que la liste ouverte contient des éléments
{
Node current = openList[0];
openList.RemoveAt(0);
closedList.Add(current);
if (current.Tile == endTile) // si l'élément courant est la case destination
{
MyLinkedList<Tile> solution = new MyLinkedList<Tile>();
// on reverse la liste fermée et on la retourne pour l'avoir dans le bonne ordre
while (current.Parent != null)
{
solution.AddFirst(current.Tile);
current = current.Parent;
}
return solution;
}
possibleNodes = current.GetPossibleNode(map, endTile); // FIXME : recupère la listes des cases adjacentes
// on ajoute cette liste a notre variable static qui contient l'ensemble des listes adjacentes (gestion de l'affichage)
PossibleNode.AddRange(possibleNodes) ;
/***************************************/
/* Ajout des noeuds adjacents candidat */
/***************************************/
for (int i = 0; i < possibleNodes.Count; i++) // on vérifie que chaque noeuds adjacent (possibleNodes)
{
if (!closedList.Contains(possibleNodes[i])) // n'existe pas dans la liste fermée (eviter la redondance)
{
if (openList.Contains(possibleNodes[i])) // FIXME : Si il existe dans la liste ouverte on vérifie
{
if (possibleNodes[i].EstimatedMovement < openList[possibleNodes[i]].EstimatedMovement) // si le cout de deplacement du
// noeud est inferieur a un coût calculer précedement, dance cas la on remonte le chemin dans la liste ouverte
openList[possibleNodes[i]].Parent = current;
}
else
openList.DichotomicInsertion(possibleNodes[i]);
}
}
}
return null;
}
示例2: CalculChemin
public static List<Case> CalculChemin(Carte carte, Case depart, Case arrivee)
{
List<Case> resultat = new List<Case>();
NodeList<Noeud> listeOuverte = new NodeList<Noeud>();
NodeList<Noeud> listeFermee = new NodeList<Noeud>();
List<Noeud> noeudsPossibles;
int nombreNoeudsPossibles;
listeOuverte.Add(new Noeud(depart, null, arrivee));
while (listeOuverte.Count > 0)
{
Noeud current = listeOuverte[0];
listeOuverte.RemoveAt(0);
listeFermee.Add(current);
if (current.Case == arrivee)
{
List<Case> solution = new List<Case>();
while (current.Parent != null)
{
solution.Add(current.Case);
current = current.Parent;
}
return solution;
}
noeudsPossibles = current.NoeudsPossibles(carte, arrivee);
nombreNoeudsPossibles = noeudsPossibles.Count;
foreach (Noeud voisin in current.NoeudsPossibles(carte, arrivee))
if (!listeFermee.Contains(voisin))
{
if (listeOuverte.Contains(voisin))
{
if (voisin.Manhattan < listeOuverte[voisin].Manhattan)
listeOuverte[voisin].Parent = current;
}
else
listeOuverte.DichotomicInsertion(voisin);
}
}
return null;
}