Pagini recente » Cod sursa (job #1365116) | Cod sursa (job #2823078) | Cod sursa (job #1405441) | Cod sursa (job #2216873) | Cod sursa (job #391193)
Cod sursa(job #391193)
#include<fstream.h>
ifstream intrare("dijkstra.in");
ofstream iesire("dijkstra.out");
const long int inf=1<<30;
const unsigned maxn=50000;
struct graf
{
unsigned int nod;
int cost;
graf *next;
};
long int n,m;
graf *start[maxn];
short int vizitat[maxn];
//int coada[maxn];
long int dist[maxn];
unsigned int q[maxn];
void add(long int a,unsigned int b,int c)
{
graf *g=new graf;
g->nod=b;
g->cost=c;
g->next=start[a];
start[a]=g;
}
void citeste()
{
intrare>>n>>m;long int a,b,c;
for(int i=0;i<m;i++)
{
intrare>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
}
void lat()
{
for(int i=1;i<=n;i++)dist[i]=inf;
dist[1]=0;
for(int i=1;i<=n;i++)
q[i]=i;
unsigned int ramase=n;
while(ramase>0)
{
long int dist_min=inf;
unsigned int care=0;
for(int i=1;i<=ramase;i++)
{
if(dist[q[i]]<dist_min)
{
care=i;
dist_min=dist[q[i]];
}
}
if(dist_min==inf)break;
unsigned int nod=q[care];
q[care]=q[ramase--];
graf *g=start[nod];
vizitat[nod]=1;
while(g)
{
unsigned int vecin=g->nod;
if(vizitat[vecin]==0)
{
long int alt=dist[nod]+g->cost;
if(alt<dist[vecin])
{
dist[vecin]=alt;
}
}
g=g->next;
}
}
}
int main()
{
citeste();
lat();
for(int i=2;i<=n;i++)
iesire<<dist[i]<<" ";
return 0;
}