Pagini recente » Cod sursa (job #1626963) | Cod sursa (job #2368404) | Cod sursa (job #2196321) | Cod sursa (job #1909227) | Cod sursa (job #1373831)
#include<cstdio>
using namespace std;
typedef struct Nod
{
int cost, nod1;
Nod *urm;
} NOD;
NOD *v[1002], *q, *p;
int viz[1002];
long long nr[1002];
int n, m, d[1002],perm[1000];
int i,j,x,y,dmin,nod0,x0,y0,c,k;
void dijkstra(int x0, int y0)
{
for (j=1; j<n; ++j)
{
dmin=1000000; //infinit=cost unei muchii * nr noduri
for (i=1; i<=n; ++i)
{
if (viz[i]==0 && dmin>d[i])
{
dmin=d[i];
nod0=i;
}
}
viz[nod0]=1;
p=v[nod0];
while (p->urm != NULL)
{
if (d[p->nod1]>dmin+p->cost)
d[p->nod1]=dmin+p->cost;
p=p->urm;
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d ", &n, &m );
//initializari
for (i=1; i<=n; ++i)
{
d[i]=1000000;
v[i]=new NOD;
v[i]->nod1=1001;
v[i]->cost=1000000;
v[i]->urm=NULL;
}
for (i=1; i<=m; ++i)
{
scanf("%d %d %d", &x, &y, &c);
q=new NOD;
q->nod1=y;
q->cost=c;
q->urm=v[x];
v[x]=q;
q=new NOD;
q->nod1=x;
q->cost=c;
q->urm=v[y];
v[y]=q;
}
p=v[1];
while (p->urm != NULL)
{
nod0=p->nod1;
d[nod0]=p->cost;
// printf("%d %d\n",p->nod1,p->cost);
p=p->urm;
}
for(i=1; i<=n; ++i)
dijkstra(1,i);
for(i=2; i<=n; ++i) printf("%d ", d[i]);
return 0;
}