• 最短路径——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[]记录前驱结点

  • 相关阅读:
    JSP语法学习笔记
    jsp 自定义标签
    java排序算法
    Linux系统rootpassword改动
    人生中第一次面试——北漂18年(1)
    msgsnd的一个小问题
    推荐系统中的矩阵分解演变方式
    FZU 2124 FOJ 2124 吃豆人【BFS】
    啦啦啦啦、新人学习中。。
    【Linux】线程并发拷贝程序
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13213471.html
Copyright © 2020-2023  润新知