Cod sursa(job #371268)

Utilizator xtremespeedzeal xtreme Data 4 decembrie 2009 18:44:31
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <stdio.h>
#include <vector>
using namespace std;

const int nmax = 50001;
const int INF = 1 << 30;
vector<pair<int,int> > G[nmax];
pair<int,int> aux;
int N,M,d[nmax],viz[nmax];


void read()       
     {freopen("dijkstra.in","r",stdin);
      int i,x,y,c;
      scanf("%d %d",&N,&M);
      for(i=1;i<=M;i++)
           {scanf("%d %d %d",&x,&y,&c);
            G[x].push_back(make_pair(y,c));
           }
      fclose(stdin);
      }
void dijkstra()
     {vector<pair<int,int> >::iterator it;
      int i,j,min,indmin=0;
     
      for(i=2;i<=N;i++)    d[i]=INF;
     
      for(i=1;i<=N;i++)
          {min=INF;
           for(j=1;j<=N;j++)
                    if(d[j]<min  && !viz[j])
                            {min=d[j];indmin=j;}
           viz[indmin]=1;
           
           for(j=0;j<G[indmin].size();j++)
                     if(d[G[indmin][j].first]>d[indmin]+G[indmin][j].second)
                                d[G[indmin][j].first]=d[indmin]+G[indmin][j].second;
           }  
      }
void write()
     {freopen("dijkstra.out","w",stdout);
      int i;
      for(i=2;i<=N;i++)   printf("%d ",d[i] == INF ? 0 : d[i]);
      printf("\n");
      fclose(stdout);
      }
int main()
    {read();
     dijkstra();
     write();
     return 0;
     }