Cod sursa(job #688643)

Utilizator mihai_bogdaannMihai Bogdan mihai_bogdaann Data 23 februarie 2012 18:41:20
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<stdio.h>
#include<stdlib.h>
#define inf 10000
FILE *fin = fopen("dijkstra.in","r");
FILE *fout = fopen("dijkstra.out","w");

int contor,a[1001][1001],n,m,c,i,j,x,y,min=9999999,nrLanturi,viz[1001],is,js,pre[1001],d[1001],cost;

void citire()
{
	fscanf(fin,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			a[i][j] = inf;
	for(i=1;i<=m;i++)
	{
		fscanf(fin,"%d%d%d",&x,&y,&c);
		a[x][y] = c;
		a[y][x] = c;
	}
}

void init()
{
	
	for(i=1;i<=n;i++)
		d[i] = a[1][i];
	pre[1] = 0;
	d[1]=0;
	viz[1]=1;
}

void djikstra()
{
	int valMin,vfMin;
	for(j=1;j<n;j++)
	{
		valMin = inf;
		for(i=1;i<=n;i++)
		{
			if(!viz[i] && d[i]<valMin)
				valMin=d[i],vfMin=i;
		}
		viz[vfMin]=1;
		for(i=1;i<=n;i++)
		{
			if(!viz[i] && d[i]> valMin + a[vfMin][i])
			{
				d[i] = valMin + a[vfMin][i];
				pre[i]=vfMin;
				
			}
		}
	}
	min = d[js];
}

void scrie()
{
	for(i=2;i<=n;i++)
		fprintf(fout,"%d ",d[i]);
}

/*void dfs(int x)
{
	viz[x]=1;
	int i,ok=0;
	for(i=1;i<=n;i++)
		if(!viz[i] && a[x][i] != 10000 && cost<=min)
		{
			//cost += a[x][i];
			ok=1;
			dfs(i);
			//cost -= a[x][i];
		}
		
	if(i>n && !ok)
		if(x == js && cost == min)
			contor++;
}*/
int main()
{
	citire();
	init();
	djikstra();
	//for(i=1;i<=n;i++)
	//	viz[i]=0;
	//dfs(is);
	scrie();
}