java - 如何求多叉树两个任意节点的最短路径呢?
ringa_lee
ringa_lee 2017-04-18 10:48:59
0
2
593

每个节点的数据结构是一个value ,和这个节点的所有子节点

ringa_lee
ringa_lee

ringa_lee

répondre à tous(2)
Ty80

Il y a n nœuds.

  1. Convertissez l'arbre en un graphe non orienté, puis utilisez des algorithmes de chemin le plus court à source unique n fois tels que dijkstra et spfa ou l'algorithme de chemin le plus court multi-source 1-time floyd pour trouver les valeurs de n'importe quel deux nœuds. Mais lorsque n est relativement grand, la surcharge mémoire liée au stockage de la valeur est importante.

  2. Faites de l'arbre un arbre enraciné, et chaque nœud i stocke la distance di à la racine. Lors de l'interrogation de deux nœuds di,dj, recherchez l'ancêtre commun dk des deux nœuds, puis d(i,j)=di+dj-dk*2. Pour plus d'informations sur les ancêtres communs, veuillez vous référer à l'algorithme de Tarjan.

小葫芦

Considérez l'algorithme de Floyd comme un graphe non orienté.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!