Advertisement
patryk

Untitled

Nov 17th, 2011
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. const int n=7;
  5. int beg,end;
  6. int G[n][n];
  7. int R[n][n];
  8. char key;
  9.  
  10. void GUnit()
  11. {
  12. for(int i=0;i<n;i++)
  13.    for(int j=0;j<n;j++)
  14.         G[i][j]=10000;
  15. }
  16.  
  17. void initR()
  18. {
  19. for(int i=0;i<n;i++)
  20.    for(int j=0;j<n;j++)
  21.         R[i][j]=0;
  22. }
  23.  
  24.  
  25. void zeruj(int g[n][n])
  26. {
  27. for(int i=0;i<n;i++)
  28.     for(int j=0;j<n;j++)
  29.         g[i][j]=0;
  30. }
  31.  
  32. void floyd(int g[n][n])
  33. {
  34. for(int k=0;k<n;k++)
  35.   for(int i=0;i<n;i++)
  36.     for(int j=0;j<n;j++)
  37.       if( g[i][k]+g[k][j]<g[i][j])
  38.         {
  39.          g[i][j]=g[i][k]+g[k][j];
  40.          R[i][j]=k;
  41.         }
  42. }
  43.  
  44. void droga(int i, int j)
  45. {
  46. int k = R[i][j];
  47. if (k != 0)
  48.  {
  49.   droga(i,k);
  50.   cout << k << " --> ";
  51.   droga(k,j);
  52.   }
  53. }
  54.  
  55.  
  56.  
  57. int main()
  58. {
  59.  
  60. do {
  61. GUnit();
  62. initR();
  63.  
  64. G[0][3]=30; G[0][1]=10;
  65. G[1][2]=15; G[1][4]=40;
  66. G[2][3]=5;  G[2][4]=20;
  67. G[4][5]=20; G[4][6]=10;
  68. G[5][6]=5;
  69. G[6][3]=25;
  70.  
  71.  
  72. cout << "\n\nPodaj wierzcholek poczatkowy: ";
  73. cin >> beg;
  74. cout << "Podaj wierzcholek koncowy: ";
  75. cin >> end;
  76.  
  77.      if(G[beg][end]==10000) {
  78.         cout << "\n\nNiestety, ale nie ma drogi bezposrednio z wierzcholka " << beg <<" do "<< end <<".";
  79.      } else {
  80.         cout <<"\n\nNajkrotsza droga wg przebytych krawedzi, waga wynosi "<<G[beg][end]<<" przebiega nastepujaco:\n";
  81.         cout << beg <<" --> ";
  82.         droga(beg,end);
  83.         cout << end;
  84.      }
  85.         floyd(G);
  86.         if(G[beg][end]==10000) {
  87.         cout << "\n\nNiestety, ale tutaj tez nie ma bezposredniego polaczenia. ";
  88.         } else {
  89.         cout <<"\n\nNajkrotsza droga wg wagi, gdzie wynosi ona "<<G[beg][end]<<" przebiega nastepujaco:\n";
  90.         cout << beg <<" --> ";
  91.         droga(beg,end);
  92.         cout << end;
  93.         }
  94. key = getch();
  95. } while(key!='q');
  96. }
  97.  
  98.  
  99.  
  100.  
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement