Dijkstra 算法模板

  1. //Dijkstra  
  2. #include <iostream>  
  3. #include <cstdio>  
  4. #include <algorithm>  
  5. #include <cstring>  
  6. using namespace std;  
  7.   
  8. #define N 1005  
  9. #define T 2005  
  10. #define INF 0x3f3f3f3f  
  11. int t,n;  
  12. int vis[N];  
  13. int g[N][N];  
  14. int d[N];  
  15.   
  16. int dijkstra(int u){  
  17.     memset(vis,0,sizeof(vis));  
  18.     memset(d,0x3f,sizeof(d));  
  19.     d[u]=0;  
  20.   
  21.     for (int i=0;i<n;i++){  
  22.         int sum=INF,k;  
  23.         for (int j=1;j<=n;j++)  
  24.             if (!vis[j] && d[j]<sum)  
  25.                 sum=d[k=j];  
  26.         vis[k]=1;  
  27.         //cout<<k<<endl;  
  28.         for (int j=1;j<=n;j++)  
  29.             if (!vis[j] && d[j]>d[k]+g[k][j])  
  30.                 d[j]=d[k]+g[k][j];  
  31.     }  
  32.   
  33.     return d[1];  
  34. }  
  35.   
  36. int main(){  
  37.     while (~scanf(“%d%d”,&t,&n)){  
  38.         memset(g,0x3f,sizeof(g));  
  39.         for (int i=0;i<t;i++){  
  40.             int u,v,d;  
  41.             scanf(“%d%d%d”,&u,&v,&d);  
  42.             if (g[u][v]>d)  
  43.                 g[u][v]=g[v][u]=d;  
  44.         }  
  45.   
  46.         printf(“%d\n”,dijkstra(n));  
  47.     }  
  48.   
  49.     return 0;  
  50. }  
点赞