天天看點

單源最短路問題(dijkstra算法)

1.鄰接矩陣實作  複雜度O(V^2)

int w[MAX_V][MAX_V]; ///w[u][v]表示邊u->v的權值(不存在時是INF)

int d[MAX_V];  ///頂點s出發的最短距離

bool vis[MAX_V]; ///已經連通的點

int V;   ///頂點數

///求起始點s到各個頂點的最短距離

void dij(int s)

{

    fill(d,d+V,INF);

    fill(vis,vis+V,false);

    d[s]=0;

    while(true)

    {

        int v=-1;

        for(int u=0;u<V;u++)   ///從未使用的頂點中選擇一個距離最小的頂點

            if(!vis[u]&&(v==-1||d[u]<d[v]))

            v=u;

        if(v==-1) break;

        vis[v]=true;

        for(int u=0;u<V;u++)

            d[u]=min(d[u],d[v]+w[v][u]);

    }

}

2.使用STL的優先隊列實作  複雜度O(ElogV)  E為邊的個數

    待更...

繼續閱讀