Advertisement
Guest User

hillcl

a guest
Apr 26th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5.  
  6. #define N 20
  7.  
  8. using namespace std;
  9.  
  10. int config[N], config1[N];
  11.  
  12. void init() {
  13.     int i, j, g, lungime = N, M[N];
  14.  
  15.     for (i = 0; i < N; i++)
  16.         M[i] = i + 1; // M = {1, 2, 3, ..., 8}
  17.  
  18.     i = 0; // i este pozitia in vectorul config unde completam cu numere generate aleator
  19.  
  20.     time_t t;
  21.     srand((unsigned)(time(&t)));
  22.  
  23.     while (lungime > 0) {
  24.         g = rand() % lungime;  // pozitia din vectorul M a numarului care va fi adaugat la vectorul config pe pozitia i
  25.         config[i++] = M[g];
  26.         for (j = g; j < lungime - 1; j++)
  27.             M[j] = M[j + 1];  // scoatem pe M[g] din  multimea M
  28.         lungime--;
  29.     }
  30.  
  31.  
  32. }
  33.  
  34. int evaluare(int c[N]) {
  35.     int erori = 0;
  36.     int i, j;
  37.     for (i = 0;i<N - 1;i++)
  38.         for (j = i + 1; j < N; j++)
  39.             if (abs(c[i] - c[j] == abs(i - j)))
  40.                 erori++;
  41.  
  42.     return erori;
  43. }
  44.  
  45. void perturbare(int c[N]) {
  46.     int x, y, temp;
  47.  
  48.     x = rand() % N;
  49.     y = rand() % N;
  50.  
  51.     while (x == y) {
  52.         y = rand() % N;
  53.     }
  54.  
  55.     temp = c[x];
  56.     c[x] = c[y];
  57.     c[y] = temp;
  58.  
  59. }
  60.  
  61. void hillclimbing() {
  62.     init();
  63.     while (evaluare(config) != 0) {
  64.         for (int i = 0; i < N; i++)
  65.             config1[i] = config[i];
  66.  
  67.         perturbare(config1);
  68.         if (evaluare(config1) < evaluare(config))
  69.             for (int i = 0; i < N; i++)
  70.                 config[i] = config1[i];
  71.  
  72.         for (int i = 0; i < N; i++)
  73.             cout << config[i];
  74.  
  75.         cout << " Evaluarea configuratiei este: " << evaluare(config) << endl;
  76.     }
  77. }
  78.  
  79. void hillclimbingrestart() {
  80.     init();
  81.     int nrit = 0;
  82.     while (evaluare(config) != 0) {
  83.         nrit = 0;
  84.     init();
  85.     while ((evaluare(config) != 0) && (nrit < 100))  {
  86.         for (int i = 0; i < N; i++)
  87.             config1[i] = config[i];
  88.  
  89.         perturbare(config1);
  90.         nrit++;
  91.         if (evaluare(config1) < evaluare(config))
  92.             for (int i = 0; i < N; i++)
  93.                 config[i] = config1[i];
  94.  
  95.         for (int i = 0; i < N; i++)
  96.             cout << config[i];
  97.  
  98.         cout << " Evaluarea configuratiei este: " << evaluare(config) << endl;
  99.     }
  100.     }
  101. }
  102.  
  103. int main() {
  104.     int i, j, g;
  105.    
  106.     /* init();
  107.     for (i = 0; i < N; i++)
  108.     cout << config[i];
  109.  
  110.     cout << " Evaluarea configuratiei este: " << evaluare(config);
  111.  
  112.     perturbare(config);
  113.     cout << endl;
  114.     for (i = 0; i < N; i++)
  115.     cout << config[i];
  116.  
  117.     cout << " Evaluarea configuratiei este: " << evaluare(config); */
  118.  
  119.     // hillclimbing();
  120.     hillclimbingrestart();
  121.     for (i = 0; i < N; i++)
  122.         cout << config[i];
  123.  
  124.     cout << " Evaluarea configuratiei este: " << evaluare(config);
  125.  
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement