k短路径

#include<bits/stdc++.h>
using namespace std;

bool done[10005];
int dis[10005],times[10005];

struct edge
{
    int to,v;
    edge(int a,int b) {to=a;v=b;}
};

vector<edge> g1[100005],g2[100005];

struct node
{
    int id,dis;
    node(int a,int b) {id=a;dis=b;}
    bool operator <(const node no) const
    {
        return dis>no.dis;
    }
};

void dijkr(int t)
{
    priority_queue<node> q;
    memset(dis,0x3f,sizeof(dis));
    dis[t]=0;
    q.push(node(t,0));
    while(!q.empty())
    {
        node u=q.top();
        q.pop();
        if(done[u.id]) continue;
        done[u.id]=1;
        for(int i=0;i<g2[u.id].size();i++)
        {
            edge v=g2[u.id][i];
            if(u.dis+v.v<dis[v.to])
            {
                dis[v.to]=u.dis+v.v;
                q.push(node(v.to,dis[v.to]));
            }
        }
    }
}

struct point
{
    int p,g,h;
    point(int a,int b,int c) {p=a;g=b;h=c;}

    bool operator <(const point &p) const
    {
        return g+h>p.g+p.h;
    }
};

void astar(int t,int k)
{
    priority_queue<point> q;
    q.push(point(1,0,dis[1]));
    while(!q.empty())
    {
        point u=q.top();
        q.pop();
        times[u.p]++;
        for(int i=0;i<g1[u.p].size();i++)
        {
            edge v=g1[u.p][i];
            q.push(point(v.to,u.v+v.v,dis[y.to]));
        }
    }
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    while(m--)
    {
        int a,b,w;
        scanf("%d%d%d",&a,&b,&w);
        g1[a].push_back(edge(b,w));
        g2[b].push_back(edge(a,w));
    }
    int s,t;
    dijkr(t);

    return 0;
}
posted @ 2025-03-12 22:45  _窗帘  阅读(12)  评论(0)    收藏  举报