Cod sursa(job #704939)

Utilizator negreanuvladNegreanu Vlad negreanuvlad Data 2 martie 2012 22:17:31
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<iostream>
#include<fstream>
#define INF 10000
using namespace std;
ofstream fout("dijkstra.out");
int n, a[10000][10000],  t[50001], v[50001], d[50001], i, j , k;
long m;
void citire(), dijkstra(int), afisare();
void citire()
{
	int dist;	
	ifstream fin("dijkstra.in");	
	fin>> n >> m;	
	for(long k=1;k<=m;++k)
	{
		fin>>i>>j>>dist;
		a[i][j]=a[j][i]=dist,cout<<dist<<" ";
	}
	
fin.close();
}


void dijkstra(int vp)

{
	for(i=1;i<=n;i++)	
	{
		
		if(a[vp][i]!=0) 
		{
			t[i]=vp;
			d[i]=a[vp][i];
		}
			else
		{
				t[i]=0;
				d[i]=INF;
		}
	
	}
	v[vp]=1;
	t[vp]=0;
	d[vp]=0;
	for(i=1;i<n;i++)
	
	{

		int dmin=INF, pmin;
		for(j=1;j<=n;j++)
			if(v[j]==0 && d[j] < dmin)
			{
				
				dmin=d[j];
				pmin=j;
			}
		if(dmin==INF) break;
		v[pmin]=1;
		for(j=1;j<=n;j++)
			if(v[j]==0 && a[pmin][j]!=0 && d[j] > d[pmin]+a[pmin][j] )	
			{
				
				d[j]=d[pmin] + a[pmin][j];	
				t[j]=pmin;			
			}
	}

}



void afisare()

{
	for(int i=2;i<=n;++i)
		fout<<d[i]<<" ";

}

int main()
{
	citire();
	dijkstra(1);
	afisare();
	return 0;
}