2013-03-08 4 views
2

데이터 구조 프로젝트의 경우 "cat"과 "dog"두 단어 사이의 최단 경로를 찾아야하지만 한 번에 한 글자 만 변경할 수 있습니다. 트라이를 구현하여, 그리고 최단 경로 검색을 구현할 수있을 것Trie의 최단 경로

고양이 수 없습니다 -.> 침대 -> 톱니가 -> 개

모든 단어가 같은 길이 될 것입니다 및 I 사전 파일에서 단어를 채우고 있습니다. 단어 사이를 이동해야합니다.

나는 tr을 사용하는 것이 실제로 불가능하다고 생각합니다. 즉, 누구라도 지식이 있습니까?

+2

참고 : 각 단어는 그래프의 정점이지만, 그래프를 생성 할 경우에도 필요가 없습니다, 당신은 단어의 배열을 사용하여 해결할 수 있습니다 유사성에 대한 좋은 척도가 아닙니다! 예 : '배'와 '곰'은 매우 유사하지만 표준 트라이에서는 뿌리까지 다시 내려 가야합니다. – us2012

답변

-1

당신이 찾고있는 것은 간단한 BFS입니다. 사전 인에서 트라이의 종류에 짧은 과거의 당신은 일반적으로 구성하는 것이

words = {"cat", "dog", "dot", "cot"} 
mark = {0, 0, 0, 0} 
distance = {0, 0, 0, 0} 
queue Q 
start_word_index = 0; // words[0] -> "cat" 
destination_word_index = 1; // words[1] -> "dog" 
Q.push(start_word_index) 
while(Q is not empty) { 
    word_index = Q.pop() 
    for each `words[j]` { 
     if (difference between `words[word_index]` and `words[j]` is only 1 character) AND 
      (`mark[j]` is not 1) { 
      mark[j] = 1 
      Q.push(j) 
      distance[j] = distance[word_index] + 1 
     } 
    } 
} 

if mark[destination_word_index] is 0 { 
    print "Not reachable" 
} else { 
    print "Distance is ", distance[destination_word_index] 
}