Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define INFINIT 1000000000
- ifstream fin("dijkstra.in");
- ofstream fout("dijkstra.out");
- int n,m,d[1001],l,x,y,i,j,s,a[101][101],pmax=-1,f[1001];
- int main()
- {fin>>n>>s;
- while(fin>>x>>y>>l)
- a[x][y]=l;
- for(i=1;i<=n;i++)
- for(j=1;j<=n;j++)
- if(a[i][j]==0) a[i][j]=INFINIT;
- for(i =1 ; i <= n ; i ++ )
- {
- f[i] = 0;
- d[i] = a[s][i];
- }
- f[s] = 1, d[s] = 0;
- d[0] = INFINIT;
- for(int k = 1 ; k < n ; ++k)
- {
- int pmax = 0;
- for(i = 1 ; i <= n ; ++i)
- if(f[i] == 0 && d[i] < d[pmax])
- pmax = i;
- if(pmax > -1)
- {
- f[pmax] = 1;
- for(i = 1; i <= n ; ++i)
- if(f[i] == 0 && d[i] > d[pmax] + a[pmax][i])
- d[i] = d[pmax] + a[pmax][i];
- }
- }
- for(i=1;i<=n;i++)
- if((d[i]==0 || d[i]==INFINIT) && i!=s) fout<<-1<<" ";
- else
- fout<<d[i]<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement