Cod sursa(job #1123686)

Utilizator meandyou01George Tudor meandyou01 Data 26 februarie 2014 09:39:50
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
using namespace std;
#define Inf 1001
ofstream g("dijkstra.out");
int D[50001],T[50001],M[50001],C[22001][22001];
int n,m,p;
void init()
{
    ifstream f("dijkstra.in");
    f>>n>>m;int x,y,c;
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        C[j][i]=C[i][j]=Inf;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        C[x][y]=c;
    }
    for(int i=1;i<=n;i++)
        {
            T[i]=1;
            D[i]=C[1][i];
        }
    M[1]=1; T[1]=0;
    f.close();
}
void solve()
{
    int i,dM,vf;
    for(int j=1;j<n;j++)
        {
            dM=Inf;
            for(int i=1;i<=n;i++)
                if(D[i]<dM && !M[i])
                {
                    vf=i; dM=D[i];
                }
            M[vf]=1;
        for(int i=1;i<=n;i++)
            {
                if(M[i]==0 && D[i]>dM+C[vf][i])
                {
                    T[i]=vf;
                    D[i]=dM+C[vf][i];
                }
            }
        }
}
void show()
{
    for(int i=2;i<=n;i++)
    g<<D[i]<<' ';
}
int main()
{
    init();
    solve();
    show();
    return 0;
}