Cod sursa(job #587209)

Utilizator AnteusPatrascoiu Mihai Anteus Data 4 mai 2011 08:36:38
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream.h>
#include <stdio.h>
#include <vector.h>
#define r 50001
#define INF 2000000000
ifstream fin("dijkstra.in");
FILE *g=fopen ("dijkstra.out", "w");
struct nod { int x,c; } t;
vector <nod> v[r];
int s[r],c[r],n,m,i;

int minim(int a, int b)
{
	return (a<b) ? a : b;
}

void citire() {
int i,x,y;
fin>>n>>m;
for (i=1;i<=m;i++)
{
	fin>>x>>y>>t.c;
	t.x=y;	v[x].push_back(t);
	t.x=x;	v[y].push_back(t);
}
for (i=2;i<=n;i++)
	c[i]=INF;
}

void dijkstra() {
int i,j,min,pmin,m;

for (i=1;i<=n;i++)
{
	min=INF;
	for (j=1;j<=n;j++)
		if (min>c[j] && !s[j])
		{
			min=c[j];	pmin=j;
		}
	s[pmin]=1;
	m=v[pmin].size()-1;
	
	for (j=0;j<=m;j++)
		if (!s[v[pmin][j].x])
			c[v[pmin][j].x]=minim(c[v[pmin][j].x], c[pmin]+v[pmin][j].c);
}
}
		


int main() {
citire();

dijkstra();

for (i=2;i<=n;i++)
	fprintf (g, "%d ", (c[i]==INF) ? 0 : c[i]);
return 0;
}