Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <omp.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. #define random()    (float)rand()/(float)RAND_MAX
  8. #define nmax 20
  9. typedef int t2[nmax][nmax];
  10. typedef int t1[nmax];
  11.  
  12. void gnp(int n, float p, t2 A) {
  13.     int i, j;
  14.     for (i = 0; i<n; i++) A[i][i] = 0;
  15.  
  16.     for (i = 0; i<n - 1; i++)
  17.         for (j = i + 1; j<n; j++) { A[i][j] = A[j][i] = (random() <= p); }
  18. }
  19. void permInit(int n, t1 p) { int i; for (i = 0; i<n; i++) p[i] = i; }
  20.  
  21. void druk(int n, int L, t1 p) {
  22.     int i;
  23.     printf("%d: ", L);
  24.     for (i = 0; i<n; i++) printf("%d ", p[i]); printf("\n");
  25. }
  26.  
  27.  
  28. int permNext(int n, t1 p) {
  29.     int i, j, x, b;
  30.     b = 0;
  31.  
  32.     i = n - 1;
  33.  
  34.     while (i>0) {
  35.         if (p[i]>p[i - 1]) {
  36.             j = n - 1;
  37.             while (p[j] < p[i - 1]) j--;
  38.             x = p[j]; p[j] = p[i - 1]; p[i - 1] = x;
  39.             while (i<n) {
  40.                 x = p[i]; p[i] = p[n - 1]; p[n - 1] = x;
  41.                 i++; n--;
  42.             };
  43.             b = 1;
  44.             break;
  45.         }
  46.         i--;
  47.     }
  48.     return b;
  49. }
  50.  
  51. int naj_roznica(int n, t2 A, t1 perm) {
  52.  
  53.     int dist, best = 1;
  54.     int i, j;
  55.     for (i = 0; i<n - 1; i++)
  56.         for (j = i + 1; j<n; j++) if (A[i][j])
  57.         {
  58.             dist = abs(perm[i] - perm[j]); if (dist>best) best = dist;
  59.         }
  60.     return best;
  61. }
  62.  
  63. int _tmain(int argc, _TCHAR* argv[])
  64. {
  65.     float p = 0.5f;
  66.     t2 A;
  67.     t1 perm;
  68.     int n = 5;
  69.     int naj_r, szerokosc;
  70.     int L = 1;
  71.     gnp(n, p, A);
  72.  
  73.     szerokosc = n - 1;
  74.  
  75.     permInit(n, perm);
  76.     omp_lock_t lck1;
  77.     int id;
  78.     omp_init_lock(&lck1);
  79. #pragma omp parallel
  80.     {
  81.         do {
  82.             naj_r = naj_roznica(n, A, perm);
  83.             //sekcja omp lock w celu zabezpieczenia wypisania i zwrócenia numeru wątku
  84.             omp_set_lock(&lck1);
  85.             if (naj_r<szerokosc) szerokosc = naj_r;
  86.             printf("NR %d\n", naj_r);
  87.             cout << "num thread" << omp_get_thread_num() << endl;
  88.             omp_unset_lock(&lck1);
  89.             //druk(n,L,perm);
  90.             L++;
  91.         } while (permNext(n, perm));
  92.     }
  93.     printf("Szerokosc grafu %d\n", szerokosc);
  94.     system("pause");
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement