Advertisement
Guest User

best frate

a guest
Feb 20th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #include <fstream>
  2. #define INF 1000000
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("dijkstra.in");
  7. ofstream fout("dijkstra.out");
  8. int nr_noduri, nod_start, graf[101][101];
  9. int d[101],p[101];
  10. bool viz[101];
  11. void citire()
  12. {
  13. fin>>nr_noduri>>nod_start;
  14. int nod1, nod2, cost;
  15. for(int i=1; i<=nr_noduri; i++)
  16. for(int j=1; j<i; j++)
  17. graf[i][j]=graf[j][i]=INF;
  18. while(fin>>nod1>>nod2>>cost)
  19. graf[nod1][nod2]=cost;
  20. }
  21. void init()
  22. {
  23. for(int j=1; j<=nr_noduri; j++)
  24. {
  25. d[j]=graf[nod_start][j];
  26. p[j]=nod_start;
  27. }
  28. p[nod_start]=0;
  29. viz[nod_start]=1;
  30. }
  31. void dijkstra()
  32. {
  33. int min, poz_min;
  34. for(int k=1; k<nr_noduri; k++)
  35. {
  36. min=INF;
  37. poz_min=0;
  38. for(int i=1; i<=nr_noduri; i++)
  39. if (min>d[i]&&viz[i]==0)
  40. {
  41. min=d[i];
  42. poz_min=i;
  43. }
  44. viz[poz_min]=1;
  45. for(int i=1; i<=nr_noduri; i++)
  46. if (poz_min!=0&&!viz[i]&&d[i]>d[poz_min]+graf[poz_min][i])
  47. {
  48. d[i]= d[poz_min]+graf[poz_min][i];
  49. p[i]=poz_min;
  50. }
  51. }
  52. }
  53. /*void afisare(int x)
  54. {
  55. if (x!=nod_start)
  56. afisare(p[x]);
  57. fout<<x<<" ";
  58. }*/
  59. int main()
  60. {
  61. citire();
  62. init();
  63. dijkstra();
  64. for(int i=1; i<=nr_noduri; i++)
  65. if(d[i]!=INF)
  66. fout<<d[i]<<" ";
  67. else
  68. fout<<"-1"<<" ";
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement