Cod sursa(job #1051379)

Utilizator iulik101Dragomir Iulian iulik101 Data 9 decembrie 2013 23:00:43
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,m,z, c[100][100], t[100],s[100], d[100],d1[100];
void dijkstra(int x)
{
    int i,j,min,p,s[100],k;
    for(i=1;i<=n;i++)
    {
        if(i==x)
        {
            d[i]=0;
            s[i]=1;
            t[i]=0;
        }
        else if(c[x][i]<1001)
        {
            d[i]=c[x][i];
            s[i]=0;
            t[i]=x;
        }
        else
        {d[i]=1001;
        s[i]=0;
        t[i]=0;
        }
        for(k=1;k<=n-2;k++)
        {
            min=1001;
            for(i=1;i<=n;i++)
            if((s[i]==0)&&(d[i]<min))
            {
                min=d[i];
                p=i;
            }
        }
        for(i=1;i<=n;i++)
        if((s[i]==0)&&(d[i]>d[p]+c[p][i]))
        {
            d[i]=d[p]+c[p][i];
            t[i]=p;
        }
    }
}
int main()
{
    int i,j,sur,cost,ok,k,x,y;
    ifstream f("distante.in");
    ofstream g("distante.out");
    f>>z;
    for(i=1;i<=z;i++)
    {
        ok=1;
        f>>n>>m>>sur;
        for(j=1;j<=n;j++)
        f>>d1[100];
        for(j=1;j<=m;j++)
        {
            f>>x>>y>>cost;
            c[x][y]=cost;
            c[y][x]=cost;
        }
        dijkstra(sur);
        for(j=1;j<=n;j++)
        {
            if(d[j]!=d1[j])
            ok=0;
        }
        if(ok==1)
        g<<"DA";
        else g<<"NU";
        g<<endl;
        for(j=1;j<=n;j++)
        {
            s[j]=t[j]=d[j]=0;
        }
        for(k=1;k<=n;k++)
        for(j=1;j<=n;j++)
        c[k][j]=0;
    }
    f.close();
    g.close();
    return 0;
}