Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <time.h>
- #include <stdlib.h>
- #define N 20
- using namespace std;
- int config[N], config1[N];
- void init() {
- int i, j, g, lungime = N, M[N];
- for (i = 0; i < N; i++)
- M[i] = i + 1; // M = {1, 2, 3, ..., 8}
- i = 0; // i este pozitia in vectorul config unde completam cu numere generate aleator
- time_t t;
- srand((unsigned)(time(&t)));
- while (lungime > 0) {
- g = rand() % lungime; // pozitia din vectorul M a numarului care va fi adaugat la vectorul config pe pozitia i
- config[i++] = M[g];
- for (j = g; j < lungime - 1; j++)
- M[j] = M[j + 1]; // scoatem pe M[g] din multimea M
- lungime--;
- }
- }
- int evaluare(int c[N]) {
- int erori = 0;
- int i, j;
- for (i = 0;i<N - 1;i++)
- for (j = i + 1; j < N; j++)
- if (abs(c[i] - c[j] == abs(i - j)))
- erori++;
- return erori;
- }
- void perturbare(int c[N]) {
- int x, y, temp;
- x = rand() % N;
- y = rand() % N;
- while (x == y) {
- y = rand() % N;
- }
- temp = c[x];
- c[x] = c[y];
- c[y] = temp;
- }
- void hillclimbing() {
- init();
- while (evaluare(config) != 0) {
- for (int i = 0; i < N; i++)
- config1[i] = config[i];
- perturbare(config1);
- if (evaluare(config1) < evaluare(config))
- for (int i = 0; i < N; i++)
- config[i] = config1[i];
- for (int i = 0; i < N; i++)
- cout << config[i];
- cout << " Evaluarea configuratiei este: " << evaluare(config) << endl;
- }
- }
- void hillclimbingrestart() {
- init();
- int nrit = 0;
- while (evaluare(config) != 0) {
- nrit = 0;
- init();
- while ((evaluare(config) != 0) && (nrit < 100)) {
- for (int i = 0; i < N; i++)
- config1[i] = config[i];
- perturbare(config1);
- nrit++;
- if (evaluare(config1) < evaluare(config))
- for (int i = 0; i < N; i++)
- config[i] = config1[i];
- for (int i = 0; i < N; i++)
- cout << config[i];
- cout << " Evaluarea configuratiei este: " << evaluare(config) << endl;
- }
- }
- }
- int main() {
- int i, j, g;
- /* init();
- for (i = 0; i < N; i++)
- cout << config[i];
- cout << " Evaluarea configuratiei este: " << evaluare(config);
- perturbare(config);
- cout << endl;
- for (i = 0; i < N; i++)
- cout << config[i];
- cout << " Evaluarea configuratiei este: " << evaluare(config); */
- // hillclimbing();
- hillclimbingrestart();
- for (i = 0; i < N; i++)
- cout << config[i];
- cout << " Evaluarea configuratiei este: " << evaluare(config);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement