Cod sursa(job #893693)

Utilizator batistaUPB-Oprea-Cosmin-Dumitru batista Data 26 februarie 2013 17:16:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
#include<queue>
#define inf 32000
using namespace std;
struct nod{int info,c;nod*adr;}*v[50003],*p;
int n,m,x,y,c,i,viz[50002],dist[50002];
queue<int> Q;
void dijkstra_coada(int nd)
{int j,d;
    Q.push(nd);
    viz[nd]=1;
    for(i=2;i<=n;i++) dist[i]=inf;
    while(!Q.empty())
    {
        nd=Q.front();
        d=dist[nd];
        p=v[nd];
        while(p)
        {
            j=p->info;
            if( !viz[j] || d + p->c < dist[j] )
            {
                dist[j] = d + p->c;
                Q.push(j);
                viz[j]=1;
            }
            p=p->adr;
        }
        Q.pop();
    }
}
int main()
{
    ifstream f("dijkstra.in");ofstream g("dijkstra.out");
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        p=new nod;
        p->info=y; p->c=c; p->adr=v[x]; v[x]=p;
    }
    dijkstra_coada(1);

    for(i=2;i<=n;i++)
     if(dist[i]==inf)g<<0<<" ";
        else g<<dist[i]<<" ";
    f.close();g.close();
    return 0;
}