Cod sursa(job #1856917)

Utilizator vladcorjucVlad Corjuc vladcorjuc Data 25 ianuarie 2017 17:16:32
Problema Drumuri minime Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
 #include <fstream>
 #define IN 20002
 using namespace std;
ifstream f("dmin.in");
ofstream g("dmin.out");
int n,k,c[100][100];
int s[500],d[500],t[500],u[500];
void dijstrka(int start)
{
    int i,ok,k,minn;
    for(i=1;i<=n;i++)
    {
        d[i]=c[start][i];
        if(c[start][i]&&c[start][i]!=IN)
        t[i]=start;
        u[i]=1;

    }
    s[start]=1;
    ok=1;
    while(ok)
    {
        minn=IN;
        for(i=1;i<=n;i++)
        if(d[i]<minn&&s[i]==0)
        {
            minn=d[i];
            k=i;
        }
        if(minn!=IN)
        {
            s[k]=1;
        for(i=1;i<=n;i++)
        if(d[i]>d[k]+c[k][i])
        {
            d[i]=d[k]+c[k][i];
            t[i]=k;
            u[i]=1;
        }
        else
            if(d[i]==(d[k]+c[k][i])&&k!=i)
                u[i]++;
        }
        else
        ok=0;

    }
}
int main()
{
    int m,x,y,i,k,j;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>k;
        c[y][x]=c[x][y]=k;
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        if(c[i][j]==0&&i!=j)
        c[i][j]=IN;
    y=1;
   dijstrka(y);
  for(i=2;i<=n;i++)
    g<<u[i]<<" ";


}