Dijkstra单源最短路模板

#include
using namespace std;
#define maxn 110
#define inf 0x3f3f3f3f
int n,m;
struct edge
{
    int u,v,w;
    edge(int uu=0,int vv=0,int ww=0)
    {
        u=uu;
        v=vv;
        w=ww;
    }
};
struct node
{
    int d,u;
    node(int dd=0,int uu=0)
    {
        d=dd;
        u=uu;
    }
    friend bool operator <(const node&a,const node&b)
    {
        if(a.d==b.d)
            return a.u>b.u;
        return a.d>b.d;
    }
};

priority_queueq;
vectore;
vectorg[maxn];
bool vis[maxn];
int dis[maxn];
void init()
{
    for(int i=0;iw)
                e[i].w=e[i^1].w=w;
            return ;
        }
    }
    e.push_back(edge(u,v,w));
    g[u].push_back(len);
    e.push_back(edge(v,u,w));
    g[v].push_back(len+1);
}
void dijkstra()
{
    struct edge ed;
    for(int i=0;i(dis[u]+ed.w))
            {
                dis[ed.v]=dis[u]+ed.w;
                q.push(node(dis[ed.v],ed.v));
            }
        }
    }
}
int main()
{
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        if(n==0&&m==0) break;
        init();
        for(int i=0;i

 

你可能感兴趣的:(最短路和次短路)