Cod sursa(job #410647)

Utilizator andreea_92ungurean andreea andreea_92 Data 4 martie 2010 15:27:23
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<fstream>
#define fn 10000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,viz[50001],minm[50001],t[50001];

typedef struct nod
{
nod *leg;
int inf,c;
}*pnod;

pnod v[100];

void add(int p,int x,int y)
{
pnod q=new nod;
q->inf=x;
q->c=y;
q->leg=v[p];
v[p]=q;
}

void citire()
{
f>>n>>m;
int x,y,z,i;
for(i=1;i<=m;i++)
{
f>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
}



int cauta(int poz,int j)
{
for(pnod p=v[poz];p!=NULL;p=p->leg)
	if(p->inf==j)
		return p->c;
return fn;
}

void dk(int x)
{
long max=fn;	
viz[x]=1;
for(pnod p=v[x];p!=NULL;p=p->leg)
{
minm[p->inf]=p->c;
if(p->c<max)
t[p->inf]=x;
}


minm[x]=0;
for(int i=1;i<n;i++)
{
int dmin=max,poz;
for(int k=1;k<=n;k++)
	if(viz[k] && dmin>minm[k])
	{
	dmin=minm[k];
	poz=k;
	}
	
viz[poz]=1;
for(int j=1;j<=n;j++)
{
if(viz[j]==0)
{
int dist=cauta(poz,j);
if(dmin+dist<minm[j])
{
minm[j]=dmin+dist;
t[j]=poz;
}
}
}
}
}

int main()
{
citire();
dk(1);
for(int i=1;i<=n;i++)
{
	if(i!=1)
		g<<minm[i]<<" ";
}

return 0;
}