Cod sursa(job #702656)

Utilizator define_AriMiculas Armand Ariel define_Ari Data 2 martie 2012 02:28:56
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<iostream>
#include<fstream>
#define NMAX 50001
using namespace std;
const int INFINIT=2000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
long n,m,C[5000][5000],t[50000], d[NMAX];
void citire()
{
	f>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j)
				C[i][j]=INFINIT;
	long x,y,c;
	while(f>>x>>y>>c)
		C[x][y]=c;
}
void dijkstra(int x0)
{
    int i, min, k, ok;
    int viz[NMAX], tata[NMAX];
    for (i = 1; i<=n; i++) {
        d[i] = C[x0][i];
        tata[i] = x0;
        viz[i] = 0;
    }
    tata[x0] = 0;
    viz[x0] = 1; ok = 1;
    while (ok) {
        min = INFINIT;
        for (i = 1; i<=n; i++)
            if (!viz[i] && min>d[i]) {
                min = d[i];
                k = i;
            }
        if (min != INFINIT) {
            viz[k] = 1;
            for (i = 1; i<=n; i++)
               if (!viz[i] && d[i]>d[k]+C[k][i]) {
                   d[i] = d[k]+C[k][i];
                   tata[i] = k;
               }
        }
        else ok = 0;
    }
}
int main()
{
	citire();
	dijkstra(1);
	for(int i=2;i<=n;i++)
		if(d[i]==INFINIT)
			g<<"0 ";
		else
			g<<d[i]<<" ";
}