Cod sursa(job #1026975)

Utilizator alecsandrualex cuturela alecsandru Data 12 noiembrie 2013 12:35:47
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include<cstdio>
#include<queue>
#include<vector>
const int MAX_N=50000;
const int MAX_M=250000;
const int INF=0x7fffffff;
//0111 1111 1111 1111 1111 1111 1111 1111
using namespace std;
struct Nod
{
    int cost,nod;
};
int cost[MAX_N + 1],n,m,i,a,b,c;
bool incoada[MAX_N + 1];
vector <Nod> vecini[MAX_N + 1];
queue <int> q;
Nod temp;
int tata,fiu,costnou;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        cost[i]=INF;
        incoada[i]=false;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        temp.cost=c;
        temp.nod=b;
        vecini[a].push_back(temp);
    }
    q.push(1);
    cost[1]=0;
    incoada[1]=true;
    while(!q.empty())
    {
        tata=q.front();
        q.pop();
        incoada[tata]=false;
        for(i=0;i<vecini[tata].size();i++)
        {
            fiu=vecini[tata][i].nod;
            costnou=cost[tata]+vecini[tata][i].cost;
            if (cost[fiu]>costnou)
            {
                cost[fiu]=costnou;
                if(!incoada[fiu])
                {
                    incoada[fiu]=true;
                    q.push(fiu);
                }
            }
        }
    }
    for(i=2;i<=n;i++)
    {
        if(cost[i]!=INF)
            printf("%d ",cost[i]);
        else
            printf("0 ");
    }
    return 0;
}