Cod sursa(job #1492447)

Utilizator grozassGroza Septimiu grozass Data 27 septembrie 2015 19:20:38
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct u {unsigned short x,y,c;};
u v[250000];
long n,m,i;
bool sem;
unsigned short w[50000];

void citire()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>v[i].x>>v[i].y>>v[i].c;
    }
}

int main()
{
    citire();
    do
    {
        sem=0;
        for(i=1;i<=m;i++)
        {
            if (v[i].x==1 && w[v[i].y]==0) {w[v[i].y]=v[i].c; sem=1;}
            else if (v[i].y==1 && w[v[i].x]==0) {w[v[i].x]=v[i].c; sem=1;}
            else if (w[v[i].x]>0 && w[v[i].y]==0) {w[v[i].y]=w[v[i].x]+v[i].c; sem=1;}
            else if (w[v[i].y]>0 && w[v[i].x]==0) {w[v[i].x]=w[v[i].y]+v[i].c; sem=1;}
            else if (w[v[i].x]>w[v[i].y]+v[i].c) {w[v[i].x]=w[v[i].y]+v[i].c; sem=1;}
            else if (w[v[i].y]>w[v[i].x]+v[i].c) {w[v[i].y]=w[v[i].x]+v[i].c; sem=1;}
        }

    }while(sem);
    for(i=2;i<=n;i++) g<<w[i]<<" ";
    g.close();
    return 0;
}