广度优先搜索(Breadth-First-Search)
广度优先搜索类似于二叉树的层次遍历,所以应该借助队列实现而非递归。代码如下:
bool visited[MAX_G_NUM];
int main(void)
{
for(i = 0; i < G.num; ++i)
visited[i] = false;
initQueue(Q);
for(i = 0; i < G.num; ++i)
if(!visited[i])
BSF(G,i);
return 0;
}
void BSF(Graph G, int v)
{
visit(v);
visited[v] = true;
Enqueue(Q, v);
while(!Empty(Q))
{
Dequeue(Q,v);
for(w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))
{
if(!visited[w])
{
visit(w);
visited[w] = true;
Enqueue(Q, w);
}
}
}
}
深度优先搜索(Depth-First-Search)
递归算法代码如下:
bool visited[MAX_G_NUM];
int main(void)
{
for(i = 0; i < G.num; ++i)
visited[i] = false;
for(i = 0; i < G.num; ++i)
if(visited[i] == false)
DFS(G, i);
}
void DFS(Graph G, int v)
{
visit(v);
visited[i] = true;
for(i = 0; i < G.num; ++i)
if(G.distance[v][i] == 1 && visited[i] == false)
DFS(G, i);
}
迷宫问题:深度优先搜索和广度优先搜索都能解决该问题,但是很明显,广度优先搜索能够得到最优路径即最短路径。