Cod sursa(job #389961)

Utilizator ZeKalangaCiocan Alin ZeKalanga Data 2 februarie 2010 16:46:01
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#define inf 100


using namespace std;

int n,mat[10000][10000],r;

void citire()
{
    freopen("dijkstra.in","r",stdin);


    int m;
    scanf("%d%d",&n,&m);

    for(int i=1;i<=n;i++)
           for(int j=1;j<=n;j++)
                {
                    if(i==j) mat[i][j]=0;
                    else mat[i][j]=inf;

                }



    for(int i=1;i<=m;i++)
        {
            int x,y,c;


            scanf("%d%d%d",&x,&y,&c);

            mat[x][y]=c;
        }
    r=1;


}


int d[10000],t[10000],s[10000];

void dijkstra()
{


    for(int i=1;i<=n;i++)
        {
            d[i]=mat[r][i];
            if(r!=i) t[i]=r;
        }

    s[r]=1;
    t[r]=0;
    int dmin,poz=0;
    for(int i=1;i<=n-1;i++)
        {
            dmin=inf;
                for(int j=1;j<=n;j++)
                    if(s[j]==0&&dmin>d[j])
                        {
                            dmin=d[j];
                            poz=j;
                        }


        s[poz]=1;
        for(int j=1;j<=n;j++)
            if(s[j]==0&&d[j]>d[poz]+mat[poz][j])
                {
                    d[j]=d[poz]+mat[poz][j];
                    t[j]=poz;
                }



        }

freopen("dijkstra.out","w",stdout);

        for(int i=2;i<=n;i++)
            printf("%d ",d[i]);

}



int main()
{
    citire();

    dijkstra();

    return 0;
}