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);
                }
        }
    }
  • 相关阅读:
    英语语法学习
    react-hook
    rrweb手机端录屏,pc端使用
    uni-app
    日期
    Mongodb 保存地理信息 并实现范围检索
    webpack2.2API阅读笔记
    react-lazyload
    项目中常用的各个依赖包的解释
    Android-----test----monkeyrunner
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5176420.html
Copyright © 2011-2022 走看看