J'essaie de faire un programme qui résout le problème de Spanning Tree minimum. Pour ce faire, j'ai une file d'attente prioritaire d'objets Edge qui devraient être triés en fonction de leur poids correspondant (après cela, cela n'a pas vraiment d'importance, mais je suis passé par des noms de nœuds). J'utilise java.util.PriorityQueue
. J'ai essayé à peu près tout mais je ne peux pas penser à mettre en œuvre la fonction compareTo()
fonctionne. Il trie la plupart des bords correctement, mais pas tous. Voici le code de la fonction compareTo()
les plus élémentaires que je pouvais penser:Java PriorityQueue semble être dans le mauvais ordre
@Override
public int compareTo(Object other) {
return toString().compareTo(((Edge) other).toString());
}
Les sorties de fonction toString()
d'abord le poids, puis les deux noeuds, donc si deux noeuds A et B ont été connectés avec le poids 4, il génèrerait
4AB
Après avoir mis dans un graphique échantillon je finis avec la file d'attente de priorité suivant:
[1AB, 1BA, 1FH, 2CB, 1CG, 1GC, 1HF, 2EB, 2CD, 3EG, 2BC, 2BE, 3AC, 2GH, 2HG, 5AD, 5EC, 3ED, 2EF, 5CE, 4FD, 2FE, 4FG, 5DA, 2DC, 3GE, 4GF, 3DE, 3CA, 4DF]
Il est clair que ce n'est pas en orde mais, fondamentalement, toute méthode de comparaison à laquelle je peux penser aboutit à ce résultat.
Pouvez-vous poster plus de votre code, y compris la classe de noeud, où vous placez des choses dans la file d'attente, et comment vous vous retrouvez avec la liste qui en résulte? – Erik
Affichez le code que vous utilisez pour afficher la file d'attente. Je parie des dollars à des beignets que votre problème est là. Si vous utilisez les méthodes de récupération pour imprimer les valeurs, vous obtiendrez l'ordre correct. – Kayaman
Si vous faites référence à la file d'attente prioritaire intégrée de Java, jetez un oeil à ceci: http://stackoverflow.com/questions/5695017/priorityqueue-not-sorting-on-add –