Cod sursa(job #971497)

Utilizator sateanuAldea Andrei sateanu Data 9 iulie 2013 14:07:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<iostream>
#include<fstream>
using namespace std;

int a[101][101], viz[101], n, k, t[101], d[101],pinf=20000000;

void dijkstra(int k)
{
	int i,j,x,min;
	for(i=1;i<=n;i++)
	{
		d[i]=a[k][i];

		if(a[k][i]<pinf)
			t[i]=k;
	}

	viz[k]=1;
	t[k]=0;
	for(i=1;i<=n-1;i++)
	{
		min=pinf;

			for(j=1;j<=n;j++){
				if(viz[j]==0&&d[j]<min){
				
					min=d[i];
					x=j;
				}
			}
		viz[x]=1;
		for(j=1;j<=n;j++)
			if(viz[j]==0 && d[j]>d[x]+a[x][j])
			{
				d[j]=d[x]+a[x][j];
				t[j]=x;
			}
	}
}

int main()
{
	ifstream f("dijkstra.in");
	ofstream g("dijkstra.out");

	f>>n>>k;

	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			a[i][j]=pinf;
		a[i][i]=0;
	}
	int i,j,cost;
	while(f>>i>>j>>cost)
	{
		a[i][j]=cost;
	}

	dijkstra(1);

	for(int i=2;i<=n;i++)
		if(d[i]<pinf)
		g<<d[i]<<' ';
		else
			g<<0<<' ';

	return 0;
}