VasilM

floyd

May 26th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define INF 1000000
  5. #define MAX 100
  6.  
  7. int G[MAX][MAX];
  8.  
  9. int maxDist = 0;
  10.  
  11. int N,M,x,y;
  12.  
  13. void floyd() {
  14.  
  15.     for (int k = 1; k <= N; k++) {
  16.         for (int i = 1; i <= N; i++) {
  17.             for (int j = 1; j <= N; j++) {
  18.  
  19.                 if (G[i][j] > G[i][k] + G[k][j]) {
  20.  
  21.                     G[i][j] = G[i][k] + G[k][j];
  22.  
  23.                     if (G[i][j] > maxDist) {
  24.  
  25.                         maxDist = G[i][j];
  26.                     }
  27.                 }
  28.             }
  29.         }
  30.     }
  31. }
  32.  
  33. int main() {
  34.  
  35.     for (int i = 0; i < MAX; i++) {
  36.         for (int j = 0; j < MAX; j++) {
  37.             G[i][j] = INF;
  38.         }
  39.         G[i][i] = 0;
  40.     }
  41.  
  42.     cin >> N >> M;
  43.  
  44.     while (M--) {
  45.         cin >> x >> y;
  46.         G[x][y] = G[y][x] = 1;
  47.     }
  48.  
  49.     floyd();
  50.  
  51.     cout << maxDist - 1 << endl;
  52.  
  53.     return EXIT_SUCCESS;
  54. }
  55.  
  56. /*
  57. Задача 2. АВИОЛИНИИ
  58.  
  59. Авиокомпания решила да направи анализ за удобствата на услугите, които предлага. Един
  60. от критериите за удобство на пътуването бил броят на прекачванията от един самолет на
  61. друг. За да изготвят оценката по този критерий, служителите на авиокомпанията
  62. направили списък на всички директни полети, които обслужва авиокомпанията, като
  63. номерирали всички летища с поредните цели числа от 1 до N. Директните полети на
  64. авиокомпанията се осъществявали и в двете посоки. Ясно е, че от едно летище до друго
  65. винаги може да се достигне, при това винаги може да се избере такъв вариант за пътуване,
  66. при който броят на прекачванията е най-малък. Ето защо от компанията решили винаги да
  67. предлагат на пътниците си маршрути с най-малък брой прекачвания. Въпреки всичко се
  68. оказало, че дори и след тази оптимизация има такива полети, за които прекачванията са
  69. твърде много. В компанията искали да си отговорят на въпроса: колко е най-големият брой
  70. прекачвания между две летища. Напишете програма aviolinii да отговори на този
  71. въпрос.
  72.  
  73. На първия ред на стандартния вход са зададени броят N (2≤ N≤ 1000) на обслужваните от
  74. авиокомпанията летища и броят М (2≤ М≤ 1000000) на директните полети между някои от
  75. тях. На всеки от следващите М реда са зададени номерата на две летища свързани с
  76. директен полет.
  77.  
  78. На един ред на стандартния изход програмата трябва да изведе максималния брой
  79. прекачвания по някой от оптималните маршрути (по отношение на броя прекачвания) за
  80. всеки две летища.
  81.  
  82. Примерен вход: Примерен изход:
  83. 10 11           4
  84. 1 2
  85. 1 3
  86. 1 5
  87. 1 7
  88. 1 8
  89. 4 6
  90. 5 7
  91. 5 9
  92. 5 10
  93. 6 8
  94. 9 10
  95. /*
Advertisement
Add Comment
Please, Sign In to add comment