真好用-dijskra最短路

#include
#include
#include
#include
using namespace std;
const int maxn = 100+5;
#define INF 1e9
//时间复杂度O(mlogn)

struct HeapNode //Dijkstra算法用到的优先队列的节点
{
    int d,u;
    HeapNode(int d,int u):d(d),u(u){}
    bool operator < (const HeapNode &rhs)const
    {
        return d > rhs.d;
    }
};
 
struct Edge     //边
{
    int from,to,dist;
    Edge(int f,int t,int d):from(f),to(t),dist(d){}
};
 
struct Dijkstra
{
    int n,m;            //点数和边数,编号都从0开始
    vector edges; //边列表
    vector G[maxn];//每个节点出发的边编号(从0开始编号)
    bool done[maxn];    //是否已永久标号
    int d[maxn];        //s到各个点的距离
    int p[maxn];        //p[i]为从起点s到i的最短路中的最后一条边的编号
 
    void init(int n)
    {
        this->n=n;
        for(int i=0;i Q;
        for(int i=0;i d[u]+e.dist)
                {
                    d[e.to] = d[u]+e.dist;
                    p[e.to] = G[u][i];
                    Q.push(HeapNode(d[e.to],e.to) );
                }
            }
        }
    }
}DJ;
 
int main()
{
    return 0;
}

 

你可能感兴趣的:(日常吐槽)