zoukankan      html  css  js  c++  java
  • 图的两种遍历:DFS&BFS

    DFS和BFS在图中的应用:

    图连通性判定;路径的存在性;图中是否存在环;求图的最小生成树;求图的关键路径;求图的拓扑排序。


    DFS:简单的说,先一直往深处走,直到不能再深了,再从另一条路开始往深处走,直到所有路都走完;

    struct node
    {
        int next;  //E[i].next指向图中与i同父的下一个结点
        int to;  //E[i].to指向图中i的子结点
    }E[110];
    
    int N;
    int fa[110];  //记录各点的父结点
    bool vis[110];  //记录这个点是否走过
    
    void DFS(int u)
    {
        vis[u]=1;
        for(int i=fa[u];i!=-1;i=E[i].next)
            if(vis[E[i].to]==0)
                DFS(E[i].to);  //DFS靠递归实现
    }

    BFS:把图看成树,先在同一层遍历各结点,再一层一层地依次往下遍历;

    //用队列queue实现
    bool vis[110];
    
    void BFS(int root,int N)  //有N个点的图,从root点开始遍历(搜索)
    {
        queue<int> que;
        memset(vis,0,sizeof(vis));
        vis[root]=1;
        que.push(root);
    
        int u;
    
        while(!que.empty())  //当图不是空的时候
        {
            u=que.front();  //将队首值赋给变量u
            que.pop();  //删除队首元素
    
            for(int i=fa[u];i!=-1;i=E[i].next)  //找到和u相连的所有点
                if(vis[E[i].to]==0)
                {
                    vis[E[i].to]=1;
                    que.push(E[i].to);
                }
        }
    }
  • 相关阅读:
    Guava教程
    Spring Aop基于注解的实现
    简单易懂设计模式——策略模式
    Hibernate入门总结
    mybatis入门详解
    Mybatis【入门总结】
    手把手教你做一个缓存工具
    超简洁!利用easyExcel导出,读入Excel
    飞越面试官(四)--类加载过程
    飞越面试官(三)--JVM
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5176420.html
Copyright © 2011-2022 走看看