Cod sursa(job #693985)

Utilizator wizekidNeagu Gabriel wizekid Data 27 februarie 2012 17:58:03
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#define nmax 10000
#define INF 1<<25
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int a[nmax][nmax],d[nmax],n,m;
void citire()
	{f>>n>>m;
	 int x,y,z;
	 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=INF;
	 for(int i=1;i<=m;i++) {f>>x>>y>>z; a[x][y]=a[y][x]=z;}
	}
void dijkstra()
	{int viz[nmax];
	 for (register int i = 1; i<=n; i++)  d[i] = a[1][i]; 
	 for(register int i=0;i<=n;i++) viz[i]=0;
	 viz[1]=1;
	 int  ok=1; 
	 int minim=INF; 
	 int k=0;
	 while (ok) 
	   {minim=INF;
		for (register int i=1;i<=n;i++)  if(!viz[i] && minim>d[i]) { minim=d[i]; k=i; };
		if (minim!=INF )  
			{viz[k]=1;
             for (int j=1;j<=n;j++) if (!viz[j] && d[j]>d[k]+a[k][j]) d[j] = d[k]+a[k][j];
            }
		else ok=0;
        }
	 for(int i=2;i<=n;i++) g<<d[i]<<" ";
	 g<<"\n";
     }
int main()
	{citire();
	 dijkstra();
     return 0;
	}