Pagini recente » Cod sursa (job #2128061) | Cod sursa (job #2805002) | Cod sursa (job #332842) | Cod sursa (job #517178) | Cod sursa (job #1677406)
#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;
}