2016-09-27 1 views
-3

나는BFS 알고리즘이 대기열을 사용하는 이유는 무엇입니까?

위키 백과

Breadth-First-Search(Graph, root): 
2 
3  for each node n in Graph:    
4   n.distance = INFINITY   
5   n.parent = NIL 
6 
7  create empty queue Q  
8 
9  root.distance = 0 
10  Q.enqueue(root)      
11 
12  while Q is not empty:   
13  
14   current = Q.dequeue() 
15  
16   for each node n that is adjacent to current: 
17    if n.distance == INFINITY: 
18     n.distance = current.distance + 1 
19     n.parent = current 
20     Q.enqueue(n) 

https://en.wikipedia.org/wiki/Breadth-first_search에 의사 코드를보고 내가 무엇에 대해 궁금하면 queueu이 노드를 보유하는 데 사용되는 이유는 특별한 이유가 있는지 여부입니다 있어요. 컨테이너에 현재있는 요소를 통과하는 순서가 관련이 없기 때문에 컨테이너를 사용할 수 있습니다.

+1

힌트 : BFS 인 경우 순서가 중요하지 않습니다. 그것을 스택으로 대체하고 어떤 일이 일어나는 지 짐작하십시오. – Carcigenicate

+0

또 다른 힌트 : 대기열 또는 스택을 사용하면 어떻게되는지 생각해보십시오. – Mai

답변

0

대기열은 컨테이너 일뿐만 아닙니다. 이것은이 알고리즘의 핵심 아이디어입니다.

대기열은 입니다. 1. 컨테이너. 2. 특정 순서로만 추가/팝 할 수 있습니다 (대기열 및 스택 모두이 속성을가집니다)

두 번째 요점은 질문에 대한 답변입니다.

대기열을 일반 목록으로 사용하는 경우 목록의 색인을 통해 요소를 직접 추가하고 팝업하면 전체 알고리즘을 그렇게 간단하게 만들 수 없습니다. (대기열이 더 이상 대기열이 아님)

관련 문제