Я бы предложил карту смежности map<string, list<string>
для представления графика. Он отображает узел графа (в нашем случае слово) в список соседних узлов (то есть все слова на расстоянии == 1).
Как заполнить эту карту? Сначала разбейте словарь на наборы слов одинаковой длины set<string> wordset[MAX_WORD_LENGTH]
и заполните карту следующим образом.
map<string, list<string>> adjacency_map
for each wordset in wordset array
for each w1 in wordset
for each w2 in wordset
if one_char_off(w1, w2) { // if the distance between w1 and w2 == 1
update(adjacency_map, w1, w2)
update(adjacency_map, w2, w1)
}
Функция one_char_off(string w1, string w2)
проверяет, равно ли расстояние между w1 и w2 1.
int diff = 0
for i in [0, w1.length) // both w1 and w2 have the same length
if w1[i] != w2[i]
if ++diff > 1
return false
return diff == 1
Функция update(map<string, list<string>> adjacency_map, string w1, string w2)
добавляет пару смежных слов w1
и w2
к соседней карте.