Cod sursa(job #211547)

Utilizator catalina5catalina serban catalina5 Data 2 octombrie 2008 19:38:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream fin("dijstra.in");
ofstream fout("dijstra.out");

int d[50000],n,m,viz[50000],t[50000],vi;

struct nod{
    int info;
    int cost;
    nod *urm;
};

nod *st[50001];

void add(int x,int y,int c1){
    nod *q=new nod;
    q->info=y;
    q->cost=c1;
    q->urm=st[x];
    st[x]=q;
}
int minim(int a,int b){
    return (a<b)?a:b;
}

void dj(){
    vi=1;
    int dr=n-1,min=vi,min1=250001;
    for (int i=0;i<=n;i++)
        d[i]=250001;
    d[vi]=0;
    viz[vi]=1;
    t[vi]=0;
    while(dr!=0){
        for (int i=min;i<=n;i++)
            if (viz[i]!=0)
                for (nod *q=st[i];q;q=q->urm)
                    if (d[q->info]==250001||(d[q->info]>d[i]+q->cost)){
                        d[q->info]=d[i]+q->cost;
                        t[q->info]=i;
                        if(viz[q->info]==0){
                            viz[q->info]=1;
                        }
                        if (i>min&&i<min1)
                                min1=i;
                    }
            min=min1;
            min1=250001;
        dr--;
    }
}

void citire(){
     int x,y,k;
     fin>>n>>m;
     for (int i=1;i<=m;i++){
         fin>>x>>y>>k;
         add(x,y,k);
         add(y,x,k);
     }
 }
void afis(){
    for (int i=2;i<=n;i++)
        if (d[i]==250001)
            fout<<0<<" ";
        else
            fout<<d[i]<<" ";
    fout<<"\n";
}

main(){
     citire();
     dj();
     afis();
     fin.close();
     fout.close();
     return 0;
 }