Advertisement
Guest User

SPIN

a guest
Feb 17th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. int n,m,d[100][100];
  5. float c[100][100], infinit=10000,cost;
  6.  
  7. void citire()
  8. {int i,x,y;
  9. ifstream f("date2.in");
  10. f>>n>>m;
  11. for(i=1;i<=m;i++)
  12. {f>>x>>y>>cost;
  13. c[x][y]=cost;
  14. }
  15.  
  16. for(i=1;i<=n;i++)
  17. for(int j=1;j<=n;j++)
  18. if(i!=j && c[i][j]==0)
  19. c[i][j]=infinit;
  20. }
  21.  
  22. void drum_initial()
  23. {int i,j,k;
  24.  
  25. for(i=1;i<=n;i++)
  26. for(j=1;j<=n;j++)
  27. if(i!=j && c[i][j]!=infinit)
  28. d[i][j]=i;
  29. if(i!=j && c[i][j]==infinit)
  30. d[i][j]=infinit;
  31. }
  32.  
  33. void drum(int i, int j)
  34. {if(i==j)
  35. cout<<i<<" ";
  36. else {drum(i,d[i][j]);
  37. cout<<j<<" ";}
  38. }
  39.  
  40. void afisare()
  41. {int i,j;
  42. for(i=1;i<=n;i++)
  43. for(j=1;j<=n;j++)
  44. for(j=1;j<=n;j++)
  45. if(i!=j)
  46. if(c[i][j]!=infinit)
  47. {cout<<"costul drumului de la "<<i<<" la "<<j<<" = "<<c[i][j]<<endl;
  48. cout<<"drumul este: ";
  49. drum(i,j);
  50. cout<<endl; }
  51.  
  52. else cout<<"Nu exista drum de la "<<i<<" la "<<j<<endl;
  53. }
  54.  
  55. void Floyd()
  56. {int i,j,k;
  57. for(k=1;k<=n;k++)
  58. for(i=1;i<=n;i++)
  59. for(j=1;j<=n;j++)
  60. if(c[i][j]>(c[i][k]+c[k][j]))
  61. {c[i][j]=c[i][k]+c[k][j];
  62. d[i][j]=d[k][j];}
  63. }
  64.  
  65. int main()
  66. {citire();
  67. drum_initial();
  68. Floyd();
  69. afisare();
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement