Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <sstream>
  5. using namespace std;
  6.  
  7. float cities[130][3];
  8. float dist[130][130]; ///distance
  9. float route[130];
  10.  
  11. int x, y;
  12.  
  13. float nearest_city( float distance[130][130] ) {
  14.     for( int j = 0; j < 130; j++ ) {
  15.         if ( dist[x][j] != 0 && cities[j][2] != 1 ) {
  16.             if ( dist[x][j] < dist[x][y] )
  17.                 y = j;
  18.         }
  19.     }
  20.     return y;
  21. }
  22.  
  23. void fill_distance() {
  24.    for( int i = 0; i < 130; i++ ) {
  25.        for( int j = 0; j < 130; j++ ) {
  26.            dist[i][j] = sqrt(pow(cities[j][0] - cities[i][0], 2) + pow(cities[j][1] - cities[i][1], 2));
  27.        }
  28.    }
  29. }
  30.  
  31. int main() {
  32.     float coor_x, coor_y, a;
  33.     float sum = 0.0;
  34.     float sum_help = 100000.0;
  35.  
  36.     ifstream file;
  37.     file.open("ch130.tsp");
  38.     file >> a;
  39.  
  40.     int i = 0;
  41.  
  42.     while( !file.eof() ) {
  43.         file >> a >> coor_x >> coor_y;
  44.  
  45.         cities[i][0] = coor_x;
  46.         cities[i][1] = coor_y;
  47.         cities[i][2] = 0;
  48.  
  49.         i++;
  50.     }
  51.  
  52.     fill_distance();
  53.  
  54.  
  55.  
  56.     for ( int i = 0; i < 130; i++ ) {
  57.         cities[i][2] = 1;
  58.  
  59.         x = i;
  60.         y = x + 1;
  61.  
  62.         for ( int k = 0; k < 129; k++ ) {
  63.  
  64.             nearest_city(dist);
  65.  
  66.             sum += dist[x][y];
  67.  
  68.             cities[y][2] = 1;
  69.  
  70.             x = y;
  71.  
  72.             for ( int l = 0; l < 130; l++ ) {
  73.                 if ( cities[l][2] != 1 )
  74.                     y = l;
  75.             }
  76.         }
  77.         sum += dist[x][i];
  78.  
  79.  
  80.         for ( int c = 0; c < 130; c++ )
  81.            cities[c][2] = 0;
  82.  
  83.  
  84.         route[i] = sum;
  85.  
  86.  
  87.         if ( sum < sum_help )
  88.             sum_help = sum;
  89.  
  90.         sum = 0;
  91.     }
  92.  
  93.     cout << "Najkrotsza trasa wynosi " << sum_help;
  94.  
  95.     for ( int z = 0; z < 130; z++ )
  96.         if ( route[z] == sum_help )
  97.             cout << " z miasta nr " << z + 1;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement