zoukankan      html  css  js  c++  java
  • 最短路径——BFS算法

    最短路径——BFS算法

    单源最短路径问题

    每对顶点间的最短路径

    BFS求无权图的单源最短路径

    bool visited[MAX_VERTEX_NUM];	//访问标记数组
    
    //广度优先遍历
    void BFS(Graph G,int v){		//从定点出发,广度优先遍历图G
        visit(v);					//访问初始顶点v
        visited[v]=TRUE;			//对v做已访问标记
        Enqueue(Q,v);				//顶点v入队列Q
        while(!isEmpty(Q)){
            DeQueue(Q,v);			//顶点v出队列
            for(w=FirstNeighbor(G,v);
                w>=0;w=NextNeighbor(G,v,w))
                //检测v所有邻接点
                if(!visited[w]){	//w为v的尚未访问的邻接顶点
                    visit(w);		//访问顶点w
                    visited[w]=TRUE;//对w做已访问标记
                    EnQueue(Q,w);	//顶点w入队列
                }
        }
    }
    
    //求顶点 u 到其他顶点的最短路径
    void BFS_MIN_Distance(Graph G,int u){
        //d[i]表示从u到i结点的最短路径
        for(i=0;i<G.vexnum;++i){
            d[i]=∞;		//初始化路径长度
            path=[i]=-1;//最短路径从哪个顶点过来
        }
        d[u]=0;
        visited[u]=TRUE;			//对v做已访问标记
        Enqueue(Q,u);				//顶点v入队列Q
        while(!isEmpty(Q)){
            DeQueue(Q,u);			//顶点v出队列
            for(w=FirstNeighbor(G,u);
                w>=0;w=NextNeighbor(G,u,w))
                //检测v所有邻接点
                if(!visited[w]){	//w为v的尚未访问的邻接顶点
                    d[w] = d[u]+1;	//路径长度加1
                    path[w]=u;		//最短路径应从u到w
                    visited[w]=TRUE;//设已访问标记
                    EnQueue(Q,w);	//顶点w入队列
                }
        }
    }
    

    就是对BFS的小修改,在visit一个顶点时,修改最短路径长度d[]并在path[]记录前驱结点

  • 相关阅读:
    微信小程序支付完整示例
    二分查找,冒泡排序, 快速排序
    JQuery放大镜效果
    js瀑布流
    linux安装字体
    使用phantomjs截图【php】
    安装supervisor
    mysql报错:BIGINT UNSIGNED value is out of range
    curl https报错: curl: (35) SSL connect error
    给www用户添加登录权限
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13213471.html
Copyright © 2011-2022 走看看