Cod sursa(job #1089646)

Utilizator thesvcoolmanLucian Bicsi thesvcoolman Data 21 ianuarie 2014 20:26:36
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<fstream>
#define INF 9999999
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int n,m,vinc,a[1000][1000];

void citire()
{
    fin>>n>>m;
    vinc=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=INF;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        fin>>x>>y>>z;
        a[x][y]=z;
    }
}

int viz[100],cost[100],t[100];

void dijkstra()
{
    int i;
    for(i=1;i<=n;i++)
        {
            cost[i]=a[vinc][i];
            if(cost[i]<INF)
                t[i]=vinc;
        }
    viz[vinc]=1;
    int mini,poz;
    for(int pas=1;pas<=n-1;pas++)
        {
            mini=INF;
            for(i=1;i<=n;i++)
                if(!viz[i])
                    if(mini>cost[i])
                    {
                        mini=cost[i];
                        poz=i;
                    }
            viz[poz]=1;
            for(i=1;i<=n;i++)
                if(!viz[i])
                    if(cost[i]>cost[poz]+a[poz][i])
                    {
                        cost[i]=cost[poz]+a[poz][i];
                        t[i]=poz;
                    }
        }

}

int main()
{
    citire();
    dijkstra();
    for(int i=2;i<=n;i++)
	if(cost[i]!=INF)
        fout<<cost[i]<<" ";
	else fout<<0<<" ";
    return 0;
}