Cod sursa(job #704919)

Utilizator negreanuvladNegreanu Vlad negreanuvlad Data 2 martie 2012 22:00:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>
#define INF 10000
using namespace std;
ofstream fout("dijkstra.out");
int n, a[10][10],  t[100], v[100], d[100], p, q, r, i, j , k;
void citire(), dijkstra(int), afisare();
void citire()
{
	int dist;	
	ifstream fin("dijkstra.in");	
	fin>> n >> p;	
while(fin>>i>>j>>dist)  a[i][j]=a[j][i]=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;
}