Ceci peut être modélisé comme un problème de graphe. Vous pouvez considérer les mots comme les nœuds du graphique et deux nœuds sont reliés si et seulement s'ils sont de même longueur et diffèrent par un seul caractère.
Vous pouvez prétraiter le dictionnaire et créer ce graphique, qui devrait ressembler à ceci :
stack jack
| |
| |
smack back -- pack -- pick
Vous pouvez ensuite avoir un mappage du mot au nœud représentant le mot, pour cela vous pouvez utiliser une table de hachage, une BST équilibrée en hauteur ...
Une fois que vous avez mis en place le mappage ci-dessus, il ne vous reste plus qu'à voir s'il existe un chemin entre les deux nœuds du graphe, ce qui peut facilement être fait en utilisant BFS ou DFS.
On peut donc résumer l'algorithme comme suit :
preprocess the dictionary and create the graph.
Given the two inputs words w1 and w2
if length(w1) != length(w2)
Not possible to convert
else
n1 = get_node(w1)
n2 = get_node(w2)
if(path_exists(n1,n2))
Possible and nodes in the path represent intermediary words
else
Not possible