SHARE
TWEET

Untitled

a guest Apr 23rd, 2019 74 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include<iostream>
  3. #include<windows.h>
  4. #include<conio.h>
  5. #include<stdio.h>
  6. #include<locale.h>
  7. #include<math.h>
  8. using namespace std;
  9.  
  10. const int n = 5;
  11.  
  12. int a[n][n] = { {0,0,5,0,20},{0,0,0,10,12},{5,0,0,0,0},{0,10,0,0,0},{20,12,0,0,0} };
  13. int b[n][n];
  14. //void way(int i0, int j0);
  15. int otk, kud;
  16.  
  17. void way(int i0, int j0){
  18.     printf("%i -> ", i0);
  19.     while (a[i0-1][j0-1] != b[i0-1][j0-1]) {
  20.         for (int i = 0; i < n; ++i){
  21.             for (int j = 0; j < n; j++){
  22.                 if ((i != i0-1) && (j != j0-1) && (a[i0-1][i] != 0) && (b[i][j0-1] != 0) && (b[i0-1][j0-1] == (a[i0-1][i] + b[i][j0-1]))) {
  23.                     printf("%i(%i) -> ", i+1, a[i0-1][i]);
  24.                     i0 = i+1;
  25.                     break;
  26.                 }
  27.             }
  28.         }
  29.     }
  30.     printf("%i(%i)", j0, a[i0-1][j0-1]);
  31. }
  32.  
  33. int main(){
  34.  
  35.     setlocale(LC_ALL, "Russian");
  36.    
  37.     int n = 5;
  38.    
  39.     cout << "Матрица а" << endl;
  40.     for (int i = 0; i < n; i++){
  41.         for (int j = 0; j < n; j++) printf("%3.1d ", a[i][j]);
  42.         cout << endl;
  43.     }
  44.     cout << endl;
  45.    
  46.     cout << "Матрица b (копия матрицы a)" << endl;
  47.     for (int i = 0; i < n; i++){
  48.         for (int j = 0; j < n; j++) {
  49.             b[i][j] = a[i][j];
  50.             printf("%3.1d ", b[i][j]);
  51.         }
  52.         cout << endl;
  53.     }
  54.     cout << endl;
  55.    
  56.    
  57.     while (1){
  58.         int is = 0;
  59.        
  60.         for (int i = 0; i < n; ++i){
  61.             for (int j = 0; j < n; j++){
  62.                 if (i != j && b[i][j] != 0){
  63.                     for (int k = 0; k < n; ++k){
  64.                    
  65.                         if (k != i && k != j && b[j][k]){
  66.                             if (b[i][k] == 0 || b[i][k] > b[i][j] + b[j][k]){
  67.                                 b[i][k] = b[i][j] + b[j][k];
  68.                                 is = 1;
  69.                             }
  70.                         }
  71.                     }    
  72.                 }
  73.             }
  74.         }
  75.         if (is == 0) break;
  76.     }
  77.  
  78.     cout << endl;
  79.  
  80.     cout << "Измененная матрица b" << endl;   
  81.     for (int i = 0; i < n; i++){
  82.         for (int j = 0; j < n; j++){
  83.             printf("%3.1d ", b[i][j]);
  84.         }
  85.         cout << endl;
  86.     }
  87.     cout << endl;
  88.  
  89.     cout << "Откуда -> куда" << endl;
  90.     int otk; int kud;
  91.     cin >> otk >> kud;
  92.     way(otk, kud);
  93.    
  94.     _getch();
  95.     return 0;
  96. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top