Cod sursa(job #1675890)

Utilizator horatiudumhoratiu horatiudum Data 5 aprilie 2016 17:04:31
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
// A C / C++ program for Dijkstra's single source shortest path algorithm.
// The program is for adjacency matrix representation of the graph
#include <iostream>
#include <stdio.h>
#include <limits>
#include <fstream>
#define V 50000
using namespace std;

//const int V = 50001;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
//FILE *in = fopen("dijkstra.in","r"), *out = fopen("dijkstra.out","w");

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


//int **graph = new int *[V];

/*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;
     }
     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;
}