dfs深度优先算法实现图的遍历(C++)

参考书:
《啊哈算法第五章:图的遍历》
《第一节。深度优先和广度优先》——深度优先
深度优先算法实现图的遍历代码如下:

#include <iostream>

using namespace std;
int book[101],sum,n=5,e[101][101];

void dfs(int cur)
{
    cout<<" "<<cur;
    sum++;
    if(sum==n) return;

    for(int i=1;i<=n;i++)   //从1号顶点到n号顶点依次尝试,看哪些顶点与当前顶点有边相连。
    {
        //判断当前顶点cur与顶点i是否有边相连,并判断顶点i 是否已经访问过
        if(e[cur][i]==1&&book[i]==0)
        {
            book[i]=1;  //标记顶点i已经访问过
            dfs(i);     //从顶点i 再出发继续访问。
        }
    }
    return;

}
int main()
{
    //初始化二维矩阵e
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j)
                e[i][j]=0;
            else
                e[i][j]=99999999;
        }
    }

    //定义一个二维数组表示顶点之间边
    int bian[5][2]={{1,2},{1,3},{1,5},{2,4},{3,5}};
    int num=sizeof(bian)/sizeof(bian[0]);
    for(int i=1;i<=num;i++)
    {
        e[bian[i-1][0]][bian[i-1][1]]=1;
        e[bian[i-1][1]][bian[i-1][0]]=1;
    }

    book[1]=1;
    dfs(1);

    cout<<endl;

    system("pause");


    return 0;
}

运行结果为:

 1 2 4 3 5
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80340571