최단 경로 - BFS
10307 단어 dfsjavascriptbfs
문제.
시작 단어와 끝 단어를 지정하려면 가장 짧은 경로를 찾아야 한다. 시작부터 끝까지 두 가지 규칙만 있고 가장 짧은 경로를 찾을 때 한 자모만 동시에 변경할 수 있으며 생성된 중간 단어는 단어 목록에 존재해야 한다.
참고: 이 블로그는 JavaByPatel blog의 JavaScript 버전입니다.
다음은 간단한 예입니다.
고양이
결국 입천장 이 터지다
리스트 = 고양이, 박쥐, 아기 침대, 톱니바퀴, 소, 쥐, 하지만, 컷, 개, 그물
경로는 다음과 같다. 고양이-쥐-박쥐-그런데 -COT-COG-DOG, 그러나 가장 짧은 경로는 고양이-COT-COG-DOG, BFS 알고리즘은 가장 짧은 경로를 통과할 수 있다. 다음은 이 알고리즘의 실현과 각자의 해석이다.
우선 한 단어에서 한 번에 한 자모만 바뀌었는지 확인하려면 다음과 같은 기능이 필요하다.
function differByOne(word, target) {
if (word.length !== target.length) return false
let diffCount = 0
for (let i = 0; i < word.length; i++) {
if (target.charAt(i) !== word.charAt(i))
diffCount++
}
return diffCount === 1
}
그런 다음 BFS를 사용하여 가장 짧은 경로를 찾습니다.function checkWords(words, start, target) {
if (!words.has(start) || !words.has(target)) return null
const queue = []
const path = []
path.push(start)
queue.push(path)
words.delete(start)
while (queue.length) {
const lastPath = queue.shift()
const lastWord = lastPath[lastPath.length - 1]
if (target == lastWord) return lastPath
for (let item of words) {
if (differByOne(item, lastWord)) {
const newPath = [...lastPath]
newPath.push(item)
queue.push(newtPath)
words.delete(item)
}
}
}
return null
}
경로, 시작 단어, 경로에 추가합니다.밀어냄(시작).
const words = new Set(['BUT', 'CUT', 'RAT', 'BAT', 'WEB', 'CAT', 'COT', 'COG', 'COW', 'DOG'])
const start = 'CAT'
const target = 'DOG'
console.log(checkWords(words, start, target))
// output
// ["CAT", "COT", "COG", "DOG"]
앞의 코드는 checkWords 함수를 호출하여 Set 형식의 데이터 구조로 단어 목록을 보내고 초기 단어와 목표 단어를 검색한 결과를 컨트롤러에 출력합니다.결과는 시작 단어에서 끝까지의 가장 짧은 경로가 될 것이다.소스 코드는 GitHub에 있습니다.
쓸모가 있습니까?당신의 지지를 표현하고 공유하세요.
안전에 주의하세요. 읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(최단 경로 - BFS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/foqc/the-shortest-path-bfs-5f8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)