Advertisement
ozimas

PO 5.0

Feb 4th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 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