Cod sursa(job #1988230)

Utilizator marinoiuraduMarinoiu Radu marinoiuradu Data 2 iunie 2017 14:35:23
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

FILE *f = fopen("dijkstra.in", "r");
FILE *g = fopen("dijkstra.out", "w");

struct muchie
{
	int v;
	int cost;
};

vector<muchie> L[50010];
queue<int> Q;
muchie muc;
int DMin[50010];
bool IsQueued[50010];

int main()
{
	for (int i = 1; i <= 50000; i++)
		DMin[i] = 999999999;
	int n, m;
	fscanf(f, "%d%d", &n, &m);
	for (int i = 0; i < m; i++)
	{
		int a, b, c;
		fscanf(f, "%d%d%d", &a, &b, &c);
		muc.cost = c;

		muc.v = b;
		L[a].push_back(muc);

		muc.v = a;
		L[b].push_back(muc);
	}
	DMin[1] = 0;
	Q.push(1);
	IsQueued[1] = true;
	while (!Q.empty())
	{
		int cnod = Q.front();
		Q.pop();
		for (muchie eachm : L[cnod])
		{
			if (DMin[cnod] + eachm.cost < DMin[eachm.v])
			{
				DMin[eachm.v] = DMin[cnod] + eachm.cost;
				if (!IsQueued[eachm.v])
					Q.push(eachm.v);
				IsQueued[eachm.v] = true;
			}
		}
		IsQueued[cnod] = false;
	}
	for (int i = 2; i <= n; i++)
	{
		if (DMin[i] == 999999999)
			fprintf(g, "%d ", 0);
		else
			fprintf(g, "%d ", DMin[i]);
	}
    return 0;
}