Pagini recente » Cod sursa (job #552954) | Cod sursa (job #1524184) | Cod sursa (job #786840) | Cod sursa (job #2088246) | Cod sursa (job #1675890)
// 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;
}