Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <vector>
  2. #include <fstream>
  3. #include <iostream>
  4. #include <cmath>
  5. #include <stdio.h>
  6. #define inf 100000000000
  7. using namespace std;
  8. ifstream in("input.txt", ios::in);
  9. ofstream out("output.txt", ios::out);
  10. int n, m;
  11. long long* w;
  12. long long** graph;
  13. void gograph();
  14. void dijkstra(long long** graph);
  15. int main()
  16. {
  17.     gograph();
  18.     dijkstra(graph);
  19.     return 0;
  20. }
  21. void gograph()
  22. {
  23.     in >> n;
  24.     w = new long long[n];
  25.     for (int i = 0; i<n; i++)
  26.         in >> w[i];
  27.     w[n-1] = 0;
  28.     graph = new long long*[n];
  29.     for (int i = 0; i<n; i++)
  30.         graph[i] = new long long[n];
  31.     for (int i = 0; i<n; i++)
  32.         for (int j = 0; j<n; j++)
  33.             graph[i][j] = -1;
  34.     in >> m;
  35.     for (int i = 0; i<m; i++)
  36.     {
  37.         long long x, y;
  38.         in >> x >> y;
  39.         x--;y--;
  40.         graph[x][y] = w[x];
  41.         graph[y][x] = w[y];
  42.     }
  43.  
  44. }
  45. void dijkstra(long long** graph)
  46. {
  47.     if (n == 1)
  48.     {
  49.         out << 0;
  50.         return;
  51.     }
  52.     int to;
  53.     long long len;
  54.     bool* used = new bool[n];
  55.     long long* d = new long long[n];
  56.     long long* p = new long long[n];
  57.     for (int i = 0; i<n; i++)
  58.     {
  59.         used[i] = false;
  60.         d[i] = inf;
  61.     }
  62.     d[0] = 0;
  63.     for (int i = 0; i<n; i++)
  64.     {
  65.         long long v = -1;
  66.         for (int j = 0; j<n; j++)
  67.             if (!used[j] && (v == -1 || d[j] < d[i]))
  68.                 v = j;
  69.         if (d[v] == inf)
  70.             break;
  71.         used[v] = true;
  72.         for (int j = 0; j<n; j++)
  73.         {
  74.             if (graph[v][j]>=0)
  75.             {
  76.                 to = j;
  77.                 len = graph[v][j];
  78.                 if (d[v] + len < d[to])
  79.                 {
  80.                     d[to] = d[v] + len;
  81.                     p[to] = v;
  82.                 }
  83.             }
  84.         }
  85.     }
  86.     out << (d[n-1] != inf ? d[n-1] : -1);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement