Cod sursa(job #702649)

Utilizator define_AriMiculas Armand Ariel define_Ari Data 2 martie 2012 01:46:42
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.99 kb
/*#include<iostream>
#include<fstream>
using namespace std;
const int inf=2000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
long n,m,a[5000][5000],t[50000];
void citire()
{
	f>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j)
				a[i][j]=inf;
	long x,y,c;
	while(f>>x>>y>>c)
		a[x][y]=c;
}
void dijkstra()
{
	int min,pos=0,ok=0;
	while(!ok)
	{
	min=inf;
	for(int i=2;i<=n;i++)
		if(a[1][i]<min&&!t[i])
		{
			min=a[1][i];
			pos=i;
		}
		t[pos]=1;
		if(min!=inf)
			for(int i=2;i<=n;i++)
				if(!t[i]&&a[1][i]>a[1][pos]+a[pos][i])
					a[1][i]=a[1][pos]+a[pos][i];
				else;
		else
			ok=1;
	}
}
int main()
{
	citire();
	dijkstra();
	for(int i=2;i<=n;i++)
		if(a[1][i]==inf)
			g<<"0 ";
		else
			g<<a[1][i]<<" ";
}
*/
#include <cstdio>

 

const int maxn = 50001;

const int inf = 1 << 30;

 

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

 

struct graf

{

int nod, cost;

graf *next;

};

 

int n, m;

graf *a[maxn];

int d[maxn], q[maxn];

 

void add(int where, int what, int cost)

{

graf *q = new graf;

q->nod = what;

q->cost = cost;

q->next = a[where];

a[where] = q;

}

 

void read()

{

fscanf(in, "%d %d", &n, &m);

 

int x, y, z;

for ( int i = 1; i <= m; ++i )

{

fscanf(in, "%d %d %d", &x, &y, &z);

add(x, y, z);

}

}

 

void dijkstra()

{

for ( int i = 2; i <= n; ++i )

d[i] = inf;

 

int min, pmin = 0;

for ( int i = 1; i <= n; ++i )

{

min = inf;

 

for ( int j = 1; j <= n; ++j )

if ( d[j] < min && !q[j] )

min = d[j], pmin = j;

 

q[pmin] = 1;

 

graf *t = a[pmin];

 

while ( t )

{

if ( d[ t->nod ] > d[pmin] + t->cost )

d[ t->nod ] = d[pmin] + t->cost;

 

t = t->next;

}

}

}

 

int main()

{

read();

dijkstra();

 

for ( int i = 2; i <= n; ++i )

fprintf(out, "%d ", d[i] == inf ? 0 : d[i]);

fprintf(out, "\n");

 

return 0;

}