Cod sursa(job #2375197)

Utilizator SmokeCiocotisan Cosmin Smoke Data 7 martie 2019 22:58:10
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb


#include "pch.h"
#include <iostream>
#include <fstream>

#define Nmax 50
#define Inf 100000
using namespace std;

int C[Nmax][Nmax];
int dist[Nmax], pr[Nmax] , M[Nmax];
int n, m;

const int x0 = 1;

void afisare()
{
	ofstream out("dijkstra.out");

	for (int i = 2; i <= n; i++)
		out << dist[i] << " ";

	out.close();

}
void citire()
{
	ifstream in("dijkstra.in");
	int x, y,c;

	in >> n >> m;

	for (int i = 1; i <= n; i++)
		for (int j = i + 1; j <= n; j++)
			C[i][j] = C[j][i] = Inf;

	for (int i = 1; i <= m; i++)
	{
		in >> x >> y>>c;
		C[x][y] = c;

	}

	for (int i = 1; i <= n; i++)
	{
		dist[i] = C[x0][i];
		pr[i] =x0;

	}

	pr[x0] = 0;
	dist[x0] = 0;
	M[x0] = 1;

	in.close();



}

int main()
{
	citire();

 
	int dmin, Vfmin;

	for (int j = 1; j < n; j++)
	{
		dmin = Inf;
		for(int  i = 1 ;i<= n ;i++)
			if (!M[i] && dmin > dist[i])
			{
				dmin = dist[i];
				Vfmin = i;
			}

		M[Vfmin] = 1;

		for(int i = 1 ;i<= n ;i++)
			if (!M[i] && dist[i] > dmin + C[Vfmin][i])
			{
				pr[i] = Vfmin;
				dist[i] = dmin + C[Vfmin][i];

			}

	}

	afisare();



	return 0;
}