Advertisement
patryk

Grafy

Nov 23rd, 2011
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.95 KB | None | 0 0
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. const int n=7;
  5.  
  6. int G[n][n]; // graf
  7. int R[n][n]; // tzw. macierz kierowania ruchem
  8. int a, b;
  9. void initG()
  10. {
  11. for(int i=0;i<n;i++)
  12.    for(int j=0;j<n;j++)
  13.         G[i][j]=10000; // nieskonczonosc
  14. }
  15.  
  16. void initR()
  17. {
  18. for(int i=0;i<n;i++)
  19.    for(int j=0;j<n;j++)
  20.         R[i][j]=0; // brak drogi
  21. }
  22.  
  23. void zeruj(int g[n][n])
  24. {
  25. for(int i=0;i<n;i++)
  26.     for(int j=0;j<n;j++)
  27.         g[i][j]=0;
  28. }
  29.  
  30. void floyd(int g[n][n])
  31. {
  32. for(int k=0;k<n;k++)
  33.   for(int i=0;i<n;i++)
  34.     for(int j=0;j<n;j++)
  35.       if( g[i][k]+g[k][j]<g[i][j])
  36.         {
  37.          g[i][j]=g[i][k]+g[k][j];
  38.          R[i][j]=k;
  39.         }
  40. }
  41.  
  42. void droga(int i, int j)
  43. {
  44. int k = R[i][j];
  45. if (k != 0)
  46.  {
  47.   droga(i,k);
  48.   textcolor(15);
  49.   cprintf("%d"); textcolor(14); cprintf("--->");
  50.   droga(k,j);
  51.   }
  52. }
  53.  
  54.  
  55.  
  56. int main()
  57. {
  58. char wybor;
  59. do{
  60. initG();
  61. initR();
  62.  
  63. G[0][3]=30; G[0][1]=10;
  64. G[1][2]=15; G[1][4]=40;
  65. G[2][3]=5;  G[2][4]=20;
  66. G[4][5]=20; G[4][6]=10;
  67. G[5][6]=5;
  68. G[6][3]=25;
  69.  
  70.  
  71. gotoxy(1, 24);
  72. textcolor(0);
  73. textbackground(15);
  74. cprintf(" W - Wszystkie mozliwe drogi |  N - Najmniejsza waga i wierzcholki | Q - Wyjscie");
  75. textbackground(0);
  76. gotoxy(1, 25); printf(": ");
  77. scanf("%c", &wybor);
  78.  
  79. switch(wybor)
  80.         {
  81.         case 'W':
  82.         case 'w':
  83.                 {
  84.                 clrscr();
  85.                 floyd(G);
  86.                 for(int i=0; i<n; i++)
  87.                         for(int j=0; j<n; j++)
  88.                                 {
  89.                                 if(G[i][j]==10000) cout << i << "  -->  " << j << "[drogi nie ma]\n";
  90.                         else
  91.                                 if(i!=j)
  92.                                 {
  93.                                 cout << i << "  -->  " << j << "="<<G[i][j]<<", droga przez: ";
  94.                                 droga(i,j);
  95.                                 cout << endl;
  96.                                 }
  97.                                 }
  98.                 break;
  99.                 }
  100.         case 'N':
  101.         case 'n':
  102.                 {
  103.                 clrscr();
  104.                 gotoxy(1,1);
  105.                 textcolor(14);
  106.                 cprintf("Wierzcholek poczatkowy: ");
  107.                 scanf("%d", &a);
  108.                 cprintf("Wierzcholek koncowy: ");
  109.                 scanf("%d", &b);
  110.                 textcolor(15);
  111.                 if(G[a][b]==10000)
  112.                         {
  113.                         textcolor(12);
  114.                         cprintf("\nBrak bezposredniego polaczenia z ");textcolor(15); cprintf("%d do %d.\n", a, b);
  115.                         for(int k=0;k<n;k++)
  116.                           for(int i=0;i<n;i++)
  117.                             for(int j=0;j<n;j++)
  118.                                 {
  119.                                 if(G[i][j]!=10000)
  120.                                         {
  121.  
  122.                                         }
  123.                                 }
  124.  
  125.                         }
  126.                 else
  127.                         {
  128.                         textcolor(12);
  129.                         cprintf("\nIstnieje bezposrednie polaczenie z ");textcolor(15);cprintf("%d do %d.\n",a , b);
  130.                         }
  131.                 floyd(G);
  132.                 if(G[a][b]!=10000)
  133.                         {
  134.                         gotoxy(1, 6);
  135.                         printf("---------------------------------------");
  136.                         gotoxy(1, 7);
  137.                         textcolor(15); cprintf("Droga wg. wagi");
  138.                         gotoxy(1, 8);
  139.                         textcolor(14); cprintf("Waga wynosi: ");textcolor(15);cprintf("%d ", G[a][b]);
  140.                         gotoxy(1, 9); textcolor(15);
  141.                         cprintf("%d", a); textcolor(14);cprintf("--->");
  142.                         droga(a, b);
  143.                         textcolor(15);
  144.                         cprintf("%d", b);
  145.                         printf("\n---------------------------------------");
  146.                         }
  147.                 break;
  148.                 }
  149.         }
  150. getch();
  151. clrscr();
  152. }while(wybor!='q');
  153. }
  154.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement