Cod sursa(job #1677406)

Utilizator horatiudumhoratiu horatiudum Data 6 aprilie 2016 15:54:51
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <stdio.h>
#include <limits>
#include <fstream>
//#define V 50000
using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

int intmax = numeric_limits<int>::max() -1;

/*int dist[V];
bool sptSet[V];
int graph[V][V];
*/
int minDistance(int* dist, bool* sptSet, int N)
{
   int min = intmax, min_index=0;

   for (int v = 0; v < N; v++)
     if (sptSet[v] == false && dist[v] <= min) {
         min = dist[v];
         min_index = v;
   }
   return min_index;
}

int main() {
     int N,M;
     int nod1=0;
     int nod2=0;
     int src=0;
     in >> N;
     in >> M;

     int* dist = new int[N];
     bool* sptSet = new bool[N];
     int **graph = new int*[N];

     for (int i = 0; i < N; i++) {
        dist[i] = intmax;
        sptSet[i] = false;
     }

     int val=0;
     for( int i = 0; i < N; i++ )
        {
            graph[i] = new int[N];
        }
     for (int u = 0; u < M; u++) {
            in >> nod1;
            in >> nod2;
            in >> val;
            graph[nod1-1][nod2-1]=val;
            //graph[nod2-1][nod1-1]=val;
     }
     /*for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cout << graph[i][j] << " ";
        }
        cout << "\n";
     }*/
     dist[src] = 0;
     for (int count = 0; count < N; count++)
     {
       int u = minDistance(dist, sptSet, N);
       sptSet[u] = true;
       for (int v = 0; v < N; v++)
         if (!sptSet[v] && graph[u][v] && dist[u] != intmax && dist[u]+graph[u][v] < dist[v]) {
            dist[v] = dist[u] + graph[u][v];
         }
     }

    for (int i = 1; i < N; i++)
        out << dist[i] << " ";
        out << "\n";
    return 0;
}