Cod sursa(job #1252652)

Utilizator Mr.DoomRaul Ignatus Mr.Doom Data 30 octombrie 2014 23:14:18
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

#define INF 0x3f3f3f

int n, m;
vector<int> c;
vector<vector<pair<int, int>>> G;
queue<int> Q;

void Read();
void Write();
void Bf(int x);

int main()
{
	Read();
	Bf(1);
	Write();

	return 0;
}

void Read()
{
	ifstream is("dijkstra.in");
	
	int i, j, cost;
	is >> n >> m;
	c.resize(n + 1, INF);
	c[1] = 0;
	G.resize(n + 1);
	for ( int t = 1; t <= m; ++t )
	{
		is >> i >> j >> cost;
		G[i].push_back(make_pair(j, cost));
	}
	
	is.close();
}

void Bf(int x)
{
	int f;
	c[x] = 0;
	Q.push(x);
	while ( !Q.empty() )
	{
		f = Q.front();
		Q.pop();
		for ( vector<pair<int, int>>::iterator it = G[f].begin(); it != G[f].end(); ++it )
		{
			if ( c[it->first] > c[f] + it->second )
			{
				c[it->first] = c[f] + it->second;
				Q.push(it->first);
			}
		}
	}
}

void Write()
{
	ofstream os("dijkstra.out");
	
	for ( vector<int>::iterator it = c.begin() + 2; it != c.end(); ++it )
	{
		if ( *it == INF )
			os << 0 << ' ';
		else
			os << *it << ' ';
	}
		
	os.close();
}