Advertisement
GUBILIN

Untitled

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