Pagini recente » Cod sursa (job #2424734) | Cod sursa (job #1080357) | Cod sursa (job #2901281) | Cod sursa (job #1841528) | Cod sursa (job #1849022)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct nod{
int nr,val;
nod *urm;
}*l[100];
int n,m,v,s[100],t[100],d[100];
int pinf=10000,min1;
void citire()
{
nod *p,*q;
fin>>n>>v;
int i,j,k;
while(fin>>i>>j>>k)
{
p=new nod;
p->nr=j;
p->val=k;
p->urm=l[i];
l[i]=p;
q=new nod;
q->nr=i;
q->val=k;
q->urm=l[j];
l[j]=q;
}
}
void cauta_min(int &vf)
{
min1=pinf;
for(int i=1;i<=n;i++)
if(!s[i])
if(d[i]<min1)
{
min1=d[i];
vf=i;
}
}
void imbunatatire(int vf)
{
int val1;
for(int i=1;i<=n;i++)
if(!s[i])
{
nod *p;
p=l[i];
while(p&&p->nr!=vf)p=p->urm;
if(!p)val1=pinf;
else val1=p->val;
if(d[i]>d[vf]+val1)
{
d[i]=d[vf]+val1;
t[i]=vf;
}
}
}
void drum(int i)
{
if(t[i])
drum(t[i]);
fout<<i<<" ";
}
void afis_vector(int ve[100])
{
for(int i=1;i<=n;i++)
fout<<ve[i]<<" ";
fout<<endl;
}
int main()
{
citire();
int vf,val1;
nod *p;
for(int i=1;i<=n;i++)
if(i!=v)
{
p=l[i];
while(p&&p->nr!=vf)p=p->urm;
if(!p)val1=pinf;
else val1=p->val;
d[i]=val1;
if(val1!=pinf)
t[i]=v;
}
for(int k=1;k<=n-1;k++)
{
cauta_min(vf);
s[vf]=1;
imbunatatire(vf);
}
/*fout<<"Drum ";afis_vector(d);
fout<<"Noduri vizitate ";afis_vector(s);
fout<<"Tati ";afis_vector(t);*/
drum(3);
return 0;
}