Pagini recente » Cod sursa (job #2831181) | Cod sursa (job #51125) | Cod sursa (job #2650026) | Cod sursa (job #2438409) | Cod sursa (job #530426)
Cod sursa(job #530426)
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct _nod
{
long int info;
int cost;
struct _nod *adr;
} nod;
typedef struct
{
nod *cap;
} list;
list A[100001];
long int C[1000001];
long int viz[100001];
long int Cost[100001];
long int n;
long int m;
long int s;
void citire(void)
{
long int a;
long int b;
int c;
FILE *f = fopen("dijkstra.in","r");
fscanf(f,"%ld %ld",&n,&m);
for(long int i=1;i<=m;i++)
{
fscanf(f,"%ld %ld %ld",&a,&b,&c);
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = b;
nou->cost = c;
nou->adr = A[a].cap;
A[a].cap = nou;
nod *nou1 = (nod*)malloc(sizeof(nod));
nou1->info = a;
nou1->cost = c;
nou1->adr = A[b].cap;
A[b].cap = nou1;
}
fclose(f);
}
void parcurgere(void)
{
C[1] = 1;
viz[1] = 1;
long int pi = 1;
long int pf = 1;
while(pi<=pf)
{
// printf("%d ",C[pi]);
pi ++;
nod *q = A[C[pi-1]].cap;
// viz[C[pi-1]] = 1;
while(q)
{
if(!viz[q->info] || (Cost[C[pi-1]] + q->cost<Cost[q->info]))
{
C[++pf] = q->info;
if(!Cost[C[pf]])
Cost[C[pf]] = Cost[C[pi-1]] + q->cost;
else if(Cost[C[pi-1]] + q->cost<Cost[C[pf]]);
{
Cost[C[pf]] = Cost[C[pi-1]] + q->cost;
// viz[C[pf]] = 0;
}
viz[C[pf]] = 1;
}
q = q->adr;
}
}
}
void afisare(void)
{
FILE *f = fopen("dijkstra.out","w");
for(long int i=2;i<=n;i++)
fprintf(f,"%d ",Cost[i]);
fclose(f);
}
int main()
{
citire();
parcurgere();
afisare();
return 0;
}