Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdlib.h>
- #include <omp.h>
- #include <iostream>
- using namespace std;
- #define random() (float)rand()/(float)RAND_MAX
- #define nmax 20
- typedef int t2[nmax][nmax];
- typedef int t1[nmax];
- void gnp(int n, float p, t2 A) {
- int i, j;
- for (i = 0; i<n; i++) A[i][i] = 0;
- for (i = 0; i<n - 1; i++)
- for (j = i + 1; j<n; j++) { A[i][j] = A[j][i] = (random() <= p); }
- }
- void permInit(int n, t1 p) { int i; for (i = 0; i<n; i++) p[i] = i; }
- void druk(int n, int L, t1 p) {
- int i;
- printf("%d: ", L);
- for (i = 0; i<n; i++) printf("%d ", p[i]); printf("\n");
- }
- int permNext(int n, t1 p) {
- int i, j, x, b;
- b = 0;
- i = n - 1;
- while (i>0) {
- if (p[i]>p[i - 1]) {
- j = n - 1;
- while (p[j] < p[i - 1]) j--;
- x = p[j]; p[j] = p[i - 1]; p[i - 1] = x;
- while (i<n) {
- x = p[i]; p[i] = p[n - 1]; p[n - 1] = x;
- i++; n--;
- };
- b = 1;
- break;
- }
- i--;
- }
- return b;
- }
- int naj_roznica(int n, t2 A, t1 perm) {
- int dist, best = 1;
- int i, j;
- for (i = 0; i<n - 1; i++)
- for (j = i + 1; j<n; j++) if (A[i][j])
- {
- dist = abs(perm[i] - perm[j]); if (dist>best) best = dist;
- }
- return best;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- float p = 0.5f;
- t2 A;
- t1 perm;
- int n = 5;
- int naj_r, szerokosc;
- int L = 1;
- gnp(n, p, A);
- szerokosc = n - 1;
- permInit(n, perm);
- omp_lock_t lck1;
- int id;
- omp_init_lock(&lck1);
- #pragma omp parallel
- {
- do {
- naj_r = naj_roznica(n, A, perm);
- //sekcja omp lock w celu zabezpieczenia wypisania i zwrócenia numeru wątku
- omp_set_lock(&lck1);
- if (naj_r<szerokosc) szerokosc = naj_r;
- printf("NR %d\n", naj_r);
- cout << "num thread" << omp_get_thread_num() << endl;
- omp_unset_lock(&lck1);
- //druk(n,L,perm);
- L++;
- } while (permNext(n, perm));
- }
- printf("Szerokosc grafu %d\n", szerokosc);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement