Cod sursa(job #1846517)

Utilizator IAmSdlSchmidt Daniel IAmSdl Data 13 ianuarie 2017 09:11:56
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

bool exista(bool V[10],int n)
{
    for(int i=1;i<=n;i++)
        if(!V[i])
            return 1;
    return 0;
}

int minim(bool viz[10],int V[10],int n)
{
    int minim=1000000;
    int k;
    for(int i=1;i<=n;i++)
        {
            if(viz[i])
                continue;
            if(V[i]<minim)
            {
                minim=V[i];
                k=i;
            }
        }
    return k;
}

int main()
{
    int A[10][10];
    int n,i,j;
    f>>n;
    int suma=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            f>>A[i][j];
            suma+=A[i][j];
        }
    }

    int dmin[10];
    int prec[10];
    bool viz[10];
    for(i=1;i<=n;i++)
    {
        dmin[i]=suma;
        prec[i]=0;
        viz[i]=false;
    }

        dmin[1]=0;
        while(exista(viz,n))
        {
            i=minim(viz,dmin,n);
            for(j=1;j<=n;j++)
            {
                if(viz[j])
                    continue;
                if(A[i][j]==0)
                {
                    A[i][j]=suma;
                }
                if(A[i][j]+dmin[i]<dmin[j])
                {
                    dmin[j]=A[i][j]+dmin[i];
                    prec[j]=i;
                }
            }
            viz[i]=true;
        }

    //for(i=1;i<=n;i++)
    //    cout<<i<<" ";
    //cout<<endl;
    for(i=1;i<=n;i++)
        g<<dmin[i]<<" ";
    cout<<endl;
    //for(i=1;i<=n;i++)
    //  cout<<prec[i]<<" ";
    //cout<<endl;
    //for(i=1;i<=n;i++)
    //  cout<<viz[i]<<" ";


    return 0;
}