zoukankan      html  css  js  c++  java
  • 无权边单源最短路径

         无权边单源最短路径相对来说比较简单,边数就是路径长度。从出发点开始,先收集路径为0顶点(它本身),然后收录他的邻顶点(路径为1),再依次收录长度为2,3,4....。整个过程其实就是一个广度优先搜索(BFS),但是需要做些改变,需要一个数组d[w]来记录顶点w到源点s的路径长度,开始时要将d[w]初始化为-1,由于d[s]表示s到s的距离,d[s]=0,d[w]还有一个作用就是判断顶点w是否被收集过。用path[w]来记录w的前一个结点是什么,这样方便打印出路径。

    void Unweight(Grape G, int i){
    Q.push(i); //顶点入队
    Enode*edge = NULL;
    while (!Q.empty()){
    i=Q.front(); //取出队头顶点并出队
    Q.pop();
    for (edge = G.Adjlist[i].Firstedge; edge; edge = edge->next){
    if (d[edge->advj] == -1){ /*若没有收录过*/
    d[edge->advj] = d[i] + 1; /*路径加1*/
    path[edge->advj] = i; /*记录他前面一个顶点*/
    Q.push(edge->advj); //入队
    }
    }
    }
    }

    void PrintPath(int s,int j){  //打印源点s到j的路径
    if (j == s){
    cout << s;
    return;
    }
    PrintPath(s,path[j]);
    cout <<"->"<<j;
    }

  • 相关阅读:
    简单工厂模式
    1.go的Hello
    Scrapy003-项目流程
    Django1.9开发博客(6)- 模板继承
    Django开发博客- 页面美化
    Django开发博客- 三部曲
    Django开发博客- 部署
    Django开发博客- 模型
    Django开发博客 入门篇
    内装式模块
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4986009.html
Copyright © 2011-2022 走看看