算法导论笔记(四)

Queue && Breadth-First-Search

Queue(队列)

1
2
3
4
5
6
7
8
9
10
11
12
13
Enqueue(Q,x) (进栈)
if(Q.head==Q.tail+1)
{
error "overflow"
}else
{
Q.[Q.tail]=x
if(Q.tail==Q.length)
{
e.tail=1
}else
Q.tail++
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dequeue(Q) (出栈)
if(Q.head==Q.tail)
{
error "underflow"
}else
{
x=Q.[Q.head]
if(Q.head==Q.length)
{
e.head=1
}else
Q.head++
return x
}

Breadth-First-Search(广度优先)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for each vertex u∈G.V-{s} 图G=(V,E)
{
u.color=WHITE
u.d=∞ (s至u的距离
u.π=NULL (u前驱
}
s.color=GRAY
s.d=0
s.π=NULL
Q=Φ
Enqueue(Q,s)
while(Q!=Φ )
{
u=Dequeue(Q)
for each v∈G.Adj[u] (邻接链表
{
if(v.color==WHITE)
{
v.color=GRAY
v.d=u.d+1
v.π=u
Enqueue(Q,v)
}
}
u.color=BLACK
}