Pagini recente » Cod sursa (job #2733563) | Cod sursa (job #2584295) | Cod sursa (job #1909725) | Cod sursa (job #2064029) | Cod sursa (job #256036)
Cod sursa(job #256036)
#include<fstream.h>
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const long inf=32000;
long m;
long d[50002],viz[50002],n,min;
struct lista
{
int nod,cost;
lista *urm;
}*a[50002];
void add(int x,int y,int z)
{
lista *q=new lista;
q->nod=y;
q->cost=z;
q->urm=a[x];
a[x]=q;
}
void citire()
{
f>>n>>m;
int x,y,z;
for(long i=1;i<=m;i++)
{
if(i<=n)
d[i]=inf;
f>>x>>y>>z;
add(x,y,z);
}
}
void gasit(int i,int j)
{
lista *q=a[i];
int y=32000,gata=0;
while(q&&!gata)
{
if(q->nod==j)
{
gata=1;
y=q->cost;
}
q=q->urm;
}
if(gasit&&d[j]>d[i]+y)
d[j]=d[i]+y;
}
void dij()
{
int x; lista *q;
q=a[1];
while(q)
{
d[q->nod]=q->cost;
q=q->urm;
}
d[1]=0;
viz[1]=1;
for(int i=2;i<=n;i++)
{
min=32000;
for(int j=2;j<=n;j++)
{
if(min>d[j]&&viz[j]==0)
{
min=d[j];
x=j;
}
}
viz[x]=1;
for(j=2;j<=n;j++)
{
if(viz[j]==0)
{
gasit(x,j);
}
}
}
}
int main()
{
citire();
dij();
for(int i=2;i<=n;i++)
g<<d[i]<<" ";
return 0;
}