最短路复习

发布时间:2019年08月28日 阅读:271 次

http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/4049.html

#include <iostream>
#include<bits/stdc++.h>

using namespace std;
const int inf = 0x3f3f3f3f;
int dist[999999],vis[999999]={0};
int tu[2999][2999],n,m;
void dijkstra(int s){
  for(int i=1;i<=n;i++){
     dist[i] = inf;
     vis[i] = 0;
  }
  dist[s] = 0;
  for(int i=1;i<=n;i++){

    int ss= -1,mmin=inf;
    for(int j=1;j<=n;j++){
        if(!vis[j]&&mmin>dist[j]){
            mmin = dist[j];
            ss = j;
            //break;
        }
    }
    if(ss==-1)break;
    vis[ss] = 1;
    for(int j=1;j<=n;j++){
        if(!vis[j]&&dist[ss]+tu[ss][j]<dist[j]){
            dist[j] = dist[ss]+tu[ss][j];
        }
    }
  }
}
int main()
{


//    int n,m;
    cin>>n>>m;
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){

         tu[i][j] = inf;
        }
        tu[i][i] = 0;

    }
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        if(w<tu[u][v]){
            tu[u][v] = w;
           tu[v][u] = w;
        }

    }
    int s,t;
    cin>>s>>t;
    dijkstra(s);
//    cout<<dijkstra(s,t)<<endl;
    if(dist[t]==inf)dist[t] = -1;
    cout<<dist[t]<<endl;
//    for(int i=1;i<=n;i++){
//
//
//    }

    return 0;
}


/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 148ms
Take Memory: 8084KB
Submit time: 2019-08-28 22:05:36
****************************************************/


Tag:
相关文章

发表评论: