图两点间最短问题

 

#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=13000;
int t,c,ts,te;
int dis[maxn];
bool vis[maxn];
struct node{
    int v,w,next;
    node(){}
    node(int _v,int _w,int _next){
        v=_v;
        w=_w;
        next=_next;
    }
}e[maxn];
int head[maxn],len;
void init(){
    memset(head,-1,sizeof head);
    len=0;
}
void add(int u,int v,int w){
    e[len]=node(v,w,head[u]);
    head[u]=len++;
} 
void add2(int u,int v,int w){
    add(u,v,w);
    add(v,u,w);
}
void spfa(int u){
    memset(vis,false,sizeof vis);
    vis[u]=true;
    memset(dis,inf,sizeof dis);
    dis[u]=0;
    queue<int> qu;
    qu.push(u);
    while(!qu.empty()){
        u=qu.front();
        qu.pop();
        vis[u]=false;
        for (int j=head[u];~j;j=e[j].next){
             int v=e[j].v;
            int w=e[j].w;
             if (dis[v]>dis[u]+w) {
                 dis[v]=dis[u]+w;
                 if (!vis[v]){
                     qu.push(v);
                     vis[v]=true;
                 }
             }
        }
    }
}
int main(){
    init();
    cin>>t>>c>>ts>>te;
    while(c--){
        int u,v,w;
         cin>>u>>v>>w;
         add2(u,v,w);
    }
    spfa(ts);
    cout<<dis[te]<<endl;
    return 0;
}

 

posted @ 2023-05-17 22:25  刘海烽  阅读(23)  评论(0)    收藏  举报