学海无涯—18.7.18

广度优先搜索(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);
}

迷宫问题:深度优先搜索和广度优先搜索都能解决该问题,但是很明显,广度优先搜索能够得到最优路径即最短路径。

猜你喜欢

转载自blog.csdn.net/huihuangxu94/article/details/81094450
今日推荐